長い質問を事前にお詫びします-私はPythonが初めてで、かなり具体的な状況でできる限り明確にしようとしています。
定期的に SEC ファイリングから特定のデータ ポイントを特定しようとしていますが、会社の CIK ID とフォーム ファイリングを手動で検索する代わりに、これを自動化したいと考えています。これまでのところ、特定の期間に SEC が受け取ったすべてのファイリングに関するメタデータをダウンロードするところまで来ました。次のようになります。
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
このすべての情報があり、これらのテキスト ファイルをダウンロードして基になるデータを表示できるにもかかわらず、このデータは xbrl 形式であり、私の操舵室から少し外れているため、解析できません。代わりに、このスクリプトに出くわしました (このサイトhttps://www.codeproject.com/Articles/1227765/Parsing-XBRL-with-Pythonから親切に提供されました):
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)
このスクリプトを実行するだけで、思いどおりに動作します。特定の会社 (この場合は IBM) の株主資本が返され、その値を取得して Excel ファイルに書き込むことができます。
私の2部構成の質問はこれです:
- 上記の元のメタデータ テーブルから関連する 3 つの列 (CIK、型、および日付) を取り出し、それをタプルのリストに書き込みました。 '20190215'),('1009891', 'D', '20190206'),...])。このデータを取得し、見つけたスクリプトの最初の部分を置き換え、それを効率的にループして、最終的に各企業、提出物、および日付の目的の値のリストを作成するにはどうすればよいでしょうか?
- これを行うためのより良い方法は一般的にありますか?関心のあるデータを照会するために、ある種の API または Python パッケージがあると思います。フォーム 10-K およびフォーム 10-Q に関する高レベルの情報がいくつかあることは知っていますが、フォームにいますややあいまいなDs。可能な限り最善の解決策に時間を効果的に費やしていることを確認したいだけです.
お手伝いありがとう!