2015-07-20 1 views
8

Y a-t-il quelqu'un qui a l'expérience du déchiquetage des limes SEC 10-K et 10-Q? Je me suis coincé en essayant de racler mensuellement les rachats d'actions réalisés à partir de ces dépôts. En particulier, je voudrais obtenir les informations suivantes: 1. Période; 2. Nombre total d'actions achetées; 3. Prix moyen payé par action; 4. le nombre total d'actions achetées dans le cadre de régimes ou de programmes annoncés publiquement; 5. Nombre maximal (ou valeur approximative) d'actions pouvant être achetées dans le cadre des régimes ou des programmes pour chaque mois de 2004 à 2014. J'ai au total plus de 90 000 formulaires à analyser, il ne sera donc pas possible de le faire manuellement. Cette information est habituellement présentée sous la rubrique «Partie 2, article 5, Marché des actions ordinaires des détenteurs d'actions et des émetteurs», sous 10-K et «Partie 2, article 2, Ventes non enregistrées de titres de capitaux propres et utilisation du produit». ".Raclage de la bande Dépôts SEC Edgar 10-K et 10-Q

Voici un exemple des dépôts 10-Q que je dois analyser: https://www.sec.gov/Archives/edgar/data/12978/000104746909007169/a2193892z10-q.htm

Si une entreprise n'ont pas de rachat d'actions, ce tableau peut manquer dans le rapport trimestriel.

J'ai essayé d'analyser les fichiers html avec Python BeautifulSoup, mais les résultats ne sont pas satisfaisants, principalement parce que ces fichiers ne sont pas écrits dans un format cohérent.

Par exemple, la seule façon que je peux penser pour analyser ces formes est

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] 

Le code ci-dessus ne retourne que le désordre qui peut contenir les informations de rachat. Cependant, 1) ce n'est pas fiable; 2) il est très lent; 3) les étapes suivantes pour gratter la date/mois, le prix de l'action, et le nombre d'actions, etc. sont beaucoup plus douloureux à faire. Je me demande s'il existe des langages/approches/applications/bases de données plus réalisables pour obtenir de telles informations? Merci un million!

+0

La liste complète des sites Web que j'ai besoin d'analyser est jointe. J'apprécierais beaucoup si vous pouviez me donner un indice! Merci! https://www.dropbox.com/s/369aviq5vkno9o3/ListURL.xlsx?dl=0 –

Répondre

1

Je ne suis pas sûr de python, mais dans R il y a une belle solution utilisant le paquet 'finstr' (https://github.com/bergant/finstr). 'finstr' extrait automatiquement les états financiers (compte de résultat, bilan, flux de trésorerie, etc.) d'EDGAR au format XBRL.