2015-07-20 151 views
8

有沒有人有過刮擦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)以下步驟颳去日期/月份,股票價格和股數等等,要做得更加痛苦。我想知道是否有更多可行的語言/方法/應用程序/數據庫來獲取此類信息?太感謝了!

+0

附上我需要解析的網站的完整列表。如果你能給我一些提示,我將非常感激!謝謝! https://www.dropbox.com/s/369aviq5vkno9o3/ListURL.xlsx?dl=0 –

回答

1

我不確定python,但是在R中有一個使用'finstr'包(https://github.com/bergant/finstr)的漂亮解決方案。 'finstr'使用XBRL格式自動提取EDGAR的財務報表(損益表,資產負債表,現金流量等)。