是否有人有收集SEC 10-K和10-Q文件的经验?当我试图从这些文件中抓取每月已实现的股票回购时,我被卡住了。具体来说,我希望得到以下信息:1.我希望得到更多的信息。期;2. 收购股份总数;3.每股支付均价;4. 作为公开宣布的计划或项目的一部分而购买的股份总数;5. 2004年至2014年期间每个月可根据计划或项目购买的股票的最大数量(或大致美元价值)。我总共有90,000多个表单要解析,因此手动执行是不可行的。
这些信息通常在10- k表格中的"第2部分第5项登记人普通股、相关股东事项和发行人购买股权证券的市场"one_answers"第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)下面的步骤来抓取日期/月份,股价,股票数量等是更痛苦的做。我想知道是否有更可行的语言/方法/应用程序/数据库来获取这些信息?万分感谢!
我不确定python,但在R中有一个漂亮的解决方案,使用'finstr'包(https://github.com/bergant/finstr)。'finstr'使用XBRL格式自动从EDGAR提取财务报表(损益表、资产负债表、现金流等)。