有没有人有过刮擦SEC 10-K和10-Q申请的经验?我试图从这些文件中刮取每月实现的股票回购,我陷入了困境。具体而言,我想获得以下信息:1.期间; 2.购买股份总数; 3.每股平均价格支付; 4.作为公开宣布计划或计划的一部分购买的股份总数; 5.根据计划或计划在2004年至2014年每个月可能购买的股票数量(或近似美元价值)。我总共有90,000多份表格可供解析,因此不可行手动。网站刮取SEC Edgar 10-K和10-Q申请
此信息通常以10-Ks的“第2部分第5项注册人普通股权,相关股东事宜和发行人购买股票证券市场”和“第2部分第2项未登记销售股权证券和所得款项用途”。
这里是我需要解析10-Q申请的一个例子: https://www.sec.gov/Archives/edgar/data/12978/000104746909007169/a2193892z10-q.htm
如果一个公司没有股份回购,该表可从本季度报告中丢失。
我试图用Python BeautifulSoup解析html文件,但结果并不令人满意,主要是因为这些文件没有以一致的格式编写。
例如,我能想到的唯一方法来解析这些形式是
from bs4 import BeautifulSoup
import requests
import unicodedata
import re
url='https://www.sec.gov/Archives/edgar/data/12978/000104746909007169/a2193892z10-q.htm'
def parse_html(url):
r = requests.get(url)
soup = BeautifulSoup(r.content, 'html5lib')
tables = soup.find_all('table')
identifier = re.compile(r'Total.*Number.*of.*Shares.*\w*Purchased.*', re.UNICODE|re.IGNORECASE|re.DOTALL)
n = len(tables) -1
rep_tables = []
while n >= 0:
table = tables[n]
remove_invalid_tags(table)
table_text = unicodedata.normalize('NFKD', table.text).encode('ascii','ignore')
if re.search(identifier, table_text):
rep_tables += [table]
n -= 1
else:
n -= 1
return rep_tables
def remove_invalid_tags(soup, invalid_tags=['sup', 'br']):
for tag in invalid_tags:
tags = soup.find_all(tag)
if tags:
[x.replaceWith(' ') for x in tags]
上面的代码只返回可能包含回购信息的混乱。但是,1)它不可靠; 2)速度很慢; 3)以下步骤刮去日期/月份,股票价格和股数等等,要做得更加痛苦。我想知道是否有更多可行的语言/方法/应用程序/数据库来获取此类信息?太感谢了!
附上我需要解析的网站的完整列表。如果你能给我一些提示,我将非常感激!谢谢! https://www.dropbox.com/s/369aviq5vkno9o3/ListURL.xlsx?dl=0 –