以自动组织的方式将资产负债表从SEC导入Dataframe



我正在考虑为任何使用Beautiful Soup的公司自动、正确地组织资产负债表数据。

我不打算得到每个变量,而是整个资产负债表。最初,我试图做许多代码来提取我选择的特定公司的URL。

例如,假设我想从以下URL获取资产负债表数据:

URL1:'https://www.sec.gov/Archives/edgar/data/1418121/000118518520000213/aple20191231_10k.htm'

或来自

URL2:'https://www.sec.gov/Archives/edgar/data/1326801/000132680120000046/form8-k03312020earnings.htm'

我正在尝试编写一个函数(假设它被称为get_balancesheet(URL)(,这样无论URL是什么,您都可以获得以有组织的方式包含资产负债表的Dataframe。

# Import libraries
import requests
import re
from bs4 import BeautifulSoup

我写了以下需要大量改进的函数

def Get_Data_Balance_Sheet(url):
page = requests.get(url)
# Create a BeautifulSoup object
soup = BeautifulSoup(page.content)
futures1 = soup.find_all(text=re.compile('CONSOLIDATED BALANCE SHEETS'))
Table=[]
for future in futures1:
for row in future.find_next("table").find_all("tr"):
t1=[cell.get_text(strip=True) for cell in row.find_all("td")]
Table.append(t1)
# Remove list from list of lists if list is empty
Table = [x for x in Table if x != []]
return Table

然后我执行以下

url='https://www.sec.gov/Archives/edgar/data/1326801/000132680120000013/fb-12312019x10k.htm'
Tab=Get_Data_Balance_Sheet(url)
Tab

请注意,这不是我计划的。这不是简单地将其放在数据帧中,而是我们需要对其进行更改,以便无论哪个URL,我们都可以获得资产负债表。

好吧,这是EDGAR,它不会很简单,但它是可行的。

首先,使用CIK,您可以提取特定类型的特定文件,这些文件是CIK在一段时间内制作的。假设您对该CIK申报人于2019年至2020年提交的表格10-K和10-Q感兴趣,无论是原始的还是修订的(例如"表格10-K/A"(。

start = 2019
end = 2020
cik = 220000320193
short_cik = str(cik)[-6:] #we will need it later to form urls

首先,我们需要获得一份符合这些标准的文件列表,并将其加载到beautifulsoup:中

import requests
from bs4 import BeautifulSoup as bs 
url = f"https://www.sec.gov/cgi-bin/srch-edgar?text=cik%3D%{cik}%22+AND+form-type%3D(10-q*+OR+10-k*)&first={start}&last={end}"
req = requests.get(url)
soup = bs(req.text,'lxml')

有8份文件符合标准:两份10-K表格和6份10-Q表格。每一份申请都有一个登录号。登录号隐藏在每个文件的url中,我们需要提取它才能到达实际目标——Excel文件,其中包含每个特定文件所附的财务报表。

acc_nums = []
for link in soup.select('td>a[href]'):
target = link['href'].split(short_cik,1)    
if len(target)>1:
acc_num = target[1].split('/')[1]
if not acc_num in acc_nums: #we need this filter because each filing has two forms: text and html, with the same accession number
acc_nums.append(acc_num)

此时,acc_nums包含这8份申请中每一份的登录号。我们现在可以下载目标Excel文件。很明显,你可以循环浏览acc_num并下载所有8个文件,但假设你只是在(随机(寻找附在第三个文件上的Excel文件:

fs_url = f"https://www.sec.gov/Archives/edgar/data/{short_cik}/{acc_nums[2]}/Financial_Report.xlsx"
fs = requests.get(fs_url)
with open('random_edgar.xlsx', 'wb') as output:
output.write(fs.content)

在那个时候,你会对苹果的财务状况有比你想知道的更多的了解。。。

最新更新