2015-07-20 14 views
8

SEC 10-K ve 10-Q dosyalamalarını kazıyarak tecrübe etmiş biri var mı? Bu dosyalardan aylık gerçekleşen hisse geri alımlarını kazımaya çalışırken sıkışıp kaldım. Özellikle, aşağıdaki bilgileri almak istiyorum: 1. Dönem; 2. Satın Alınan Payların Toplam Sayısı; 3. Hisse Başına Ortalama Ortalama Fiyat; 4. Kamuya Açık Planların veya Programların Bir Parçası Olarak Satın Alınan Toplam Pay Sayısı; 5. 2004'ten 2014'e kadar her ay için Planlarda veya Programlarda Satın Alınabilecek Payların Maksimum Numarası (veya Yaklaşık Dolar Değeri). Ayrıştırmak için toplam 90.000'den fazla formum var, bu yüzden bunu yapmak mümkün olmayacaktır. manuel.Web kazıma SEC Edgar 10-K ve 10-Q başvuruları

Bu bilgiler genellikle Part" 10 Ks "Pazar Kaydolan Ortak Equity, İlgili hususlar ve hisse sermaye satın almalarına yönelik Bölüm 2 Öğe 5" ve altında bildirilmektedir

Hisse Menkul ve Gelirlerinin Kullanım 2 Öğe 2 Kayıtsız Satış ". kesin bir hayır hisse geri alımına varsa bu tablo üç aylık raporda eksik olabilir, https://www.sec.gov/Archives/edgar/data/12978/000104746909007169/a2193892z10-q.htm

:

İşte ayrıştırmak gerekiyor 10-Q başvuruların bir örnektir.

Python BeautifulSoup ile html dosyalarını ayrıştırmayı denedim, ancak sonuçlar genellikle tutarlı olmayan bir biçimde yazılmadığı için tatmin edici değil.

Örneğin, bu formları ayrıştırmak için düşünebildiğim tek yolu yukarıdaki kod yalnızca repo bilgiler içerebilir pis bir döner

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] 

olduğunu. Bununla birlikte, 1) güvenilir değildir; 2) çok yavaş; 3) Tarih/ay, hisse senedi fiyatı ve hisse sayısı vb. Kazıma için aşağıdaki adımlar yapılmalıdır. Böyle bir bilgi almak için daha uygun diller/yaklaşımlar/uygulamalar/veritabanları olup olmadığını merak ediyorum? Bir milyona teşekkürler!

+0

Ayrıştırmak istediğim web sitelerinin tam listesi eklenmiştir. Bana biraz ipucu verebilirsen çok memnun olurum! Teşekkürler! https://www.dropbox.com/s/369aviq5vkno9o3/ListURL.xlsx?dl=0 –

cevap

1

Piton hakkında emin değilim, fakat R'de 'finstr' paketini (https://github.com/bergant/finstr) kullanarak güzel bir çözüm var. 'finstr', XBRL formatını kullanarak finansal tabloları (gelir tablosu, bilanço, nakit akışı vb.) Otomatik olarak EDGAR'dan çıkarır.

İlgili konular