So nutzen Sie Beautiful Soup, um die Edgar-Datenbank der SEC zu durchsuchen und Wunschdaten zu erhaltenPython

Python-Programme
Anonymous
 So nutzen Sie Beautiful Soup, um die Edgar-Datenbank der SEC zu durchsuchen und Wunschdaten zu erhalten

Post by Anonymous »

Entschuldigung im Voraus für die lange Frage – ich bin Python-Neuling und versuche, eine ziemlich spezifische Situation so deutlich wie möglich zu formulieren.

Ich versuche routinemäßig, bestimmte Datenpunkte aus SEC-Einreichungen zu identifizieren, möchte dies jedoch automatisieren, anstatt manuell nach der CIK-ID und Formulareinreichung eines Unternehmens suchen zu müssen. Bisher konnte ich Metadaten zu allen Einreichungen herunterladen, die in einem bestimmten Zeitraum bei der SEC eingegangen sind. Es sieht so aus:

Code: Select all

index   cik         conm             type        date           path
0   0   1000045 NICHOLAS FINANCIAL INC  10-Q   2019-02-14   edgar/data/1000045/0001193125-19-039489.txt
1   1   1000045 NICHOLAS FINANCIAL INC  4   2019-01-15  edgar/data/1000045/0001357521-19-000001.txt
2   2   1000045 NICHOLAS FINANCIAL INC  4   2019-02-19  edgar/data/1000045/0001357521-19-000002.txt
3   3   1000045 NICHOLAS FINANCIAL INC  4   2019-03-15  edgar/data/1000045/0001357521-19-000003.txt
4   4   1000045 NICHOLAS FINANCIAL INC  8-K 2019-02-01  edgar/data/1000045/0001193125-19-024617.txt
Obwohl ich über alle diese Informationen verfüge und diese Textdateien herunterladen und die zugrunde liegenden Daten sehen kann, kann ich diese Daten nicht analysieren, da sie im xbrl-Format vorliegen und etwas außerhalb meines Steuerhauses liegen. Stattdessen bin ich auf dieses Skript gestoßen (freundlicherweise bereitgestellt von dieser Website https://www.codeproject.com/Articles/12 ... ith-Python):

Code: Select all

from bs4 import BeautifulSoup
import requests
import sys

# Access page
cik = '0000051143'
type = '10-K'
dateb = '20160101'

# Obtain HTML for search page
base_url = "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK={}&type={}&dateb={}"
edgar_resp = requests.get(base_url.format(cik, type, dateb))
edgar_str = edgar_resp.text

# Find the document link
doc_link = ''
soup = BeautifulSoup(edgar_str, 'html.parser')
table_tag = soup.find('table', class_='tableFile2')
rows = table_tag.find_all('tr')
for row in rows:
cells = row.find_all('td')
if len(cells) > 3:
if '2015' in cells[3].text:
doc_link = 'https://www.sec.gov' + cells[1].a['href']

# Exit if document link couldn't be found
if doc_link == '':
print("Couldn't find the document link")
sys.exit()

# Obtain HTML for document page
doc_resp = requests.get(doc_link)
doc_str = doc_resp.text

# Find the XBRL link
xbrl_link = ''
soup = BeautifulSoup(doc_str, 'html.parser')
table_tag = soup.find('table', class_='tableFile', summary='Data Files')
rows = table_tag.find_all('tr')
for row in rows:
cells = row.find_all('td')
if len(cells) > 3:
if 'INS' in cells[3].text:
xbrl_link = 'https://www.sec.gov' + cells[2].a['href']

# Obtain XBRL text from document
xbrl_resp = requests.get(xbrl_link)
xbrl_str = xbrl_resp.text

# Find and print stockholder's equity
soup = BeautifulSoup(xbrl_str, 'lxml')
tag_list = soup.find_all()
for tag in tag_list:
if tag.name == 'us-gaap:stockholdersequity':
print("Stockholder's equity: " + tag.text)
Das Ausführen dieses Skripts funktioniert genau so, wie ich es möchte. Es gibt das Eigenkapital eines bestimmten Unternehmens (in diesem Fall IBM) zurück, und ich kann diesen Wert dann in eine Excel-Datei schreiben.

Meine zweiteilige Frage lautet wie folgt:
  • Ich habe die drei relevanten Spalten (CIK, Typ und Datum) aus meiner ursprünglichen Metadatentabelle oben genommen und sie in eine Liste von Tupeln geschrieben – ich glaube, so heißt sie – sie sieht so aus [('1009759', 'D', '20190215'),('1009891', 'D', '20190206'),...]). Wie nehme ich diese Daten, ersetze den ersten Teil des Skripts, den ich gefunden habe, und durchlaufe sie effizient, damit ich am Ende eine Liste der gewünschten Werte für jedes Unternehmen, jede Einreichung und jedes Datum erhalte?
  • Gibt es im Allgemeinen eine bessere Möglichkeit, dies zu tun? Ich denke, es gäbe eine Art API oder ein Python-Paket, um die Daten, die mich interessieren, abzufragen. Ich weiß, dass es für Form 10-Ks und Form 10-Qs einige hochrangige Informationen gibt, ich befinde mich jedoch in Form Ds, was etwas unklar ist. Ich möchte nur sicherstellen, dass ich meine Zeit effektiv mit der bestmöglichen Lösung verbringe.
Vielen Dank für die Hilfe!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post