SEC 10-K および 10-Q ファイリングをスクレイピングした経験のある人はいますか? これらのファイリングから毎月の実現株式買戻しをかき集めようとしているときに、私は立ち往生しました. 具体的には、次の情報を取得したいと考えています。 1. 期間。2. 購入した株式の総数。3. 1 株あたりの平均支払価格。4. 公表された計画またはプログラムの一部として購入された株式の総数。5. 2004 年から 2014 年までの各月のプランまたはプログラムに基づいてまだ購入される可能性のある株式の最大数 (またはおおよそのドル価値)。解析するフォームが合計で 90,000 以上あるため、それを実行することは現実的ではありません。手動で。
この情報は通常、10-K の「パート 2 項目 5 登録者の普通株式、関連する株主の事項、および発行者の株式証券の購入に関する市場」および「パート 2 項目 2 株式証券の未登録売却および資金の使途」で報告されます。
解析する必要がある 10-Qファイリングの一例を次に示し ます。
企業が自社株買いを行っていない場合、この表は四半期報告書から欠落している可能性があります。
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)日付/月、株価、株式数などをスクレイピングする次の手順は、はるかに面倒です。そのような情報を取得するためのより実行可能な言語/アプローチ/アプリケーション/データベースがあるかどうか疑問に思っていますか? どうもありがとう!