【问题标题】:Import Balance Sheet in an automatic organized manner from SEC to Dataframe以自动有组织的方式将资产负债表从 SEC 导入 Dataframe
【发布时间】:2021-03-20 18:06:30
【问题描述】:

我正在考虑为任何使用 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 文件在很多方面都很糟糕,其中之一就是缺乏统一的格式。因此,使用一个 beautifulsoup 脚本可能无法抓取所有文件。但是,如果您同时拥有申报人的 CIK 和特定申报的入藏号,则可以直接获取资产负债表。如果没有,则必须按公司名称、申请类型和期限搜索 EDGAR,并从中提取该期限内该类型每个申请的 CIK 和登录号。
  • @JackFleeting 那么假设我有 CIK 编号,即 0000320193,我如何才能获得这家公司 10-K 的资产负债表?

标签: python-3.x beautifulsoup request finance


【解决方案1】:

嗯,这就是 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 份文件符合标准:2 份 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)

届时,您将获得比您想知道的更多关于 Apple 财务状况的信息...

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 2021-05-25
相关资源
最近更新 更多