首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以自动组织的方式将资产负债表从SEC导入到Dataframe

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

Stack Overflow用户
提问于 2020-12-09 19:04:34
回答 1查看 52关注 0票数 1

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

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

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

代码语言:javascript
复制
URL1:'https://www.sec.gov/Archives/edgar/data/1418121/000118518520000213/aple20191231_10k.htm'

或来自

代码语言:javascript
复制
URL2:'https://www.sec.gov/Archives/edgar/data/1326801/000132680120000046/form8-k03312020earnings.htm'

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

代码语言:javascript
复制
# Import libraries
import requests
import re
from bs4 import BeautifulSoup

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

代码语言:javascript
复制
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

然后,我执行以下代码

代码语言:javascript
复制
url='https://www.sec.gov/Archives/edgar/data/1326801/000132680120000013/fb-12312019x10k.htm'
Tab=Get_Data_Balance_Sheet(url)
Tab

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-09 23:35:47

作为埃德加,这不会很简单,但这是可行的。

首先,使用CIK,您可以提取特定类型的特定文件,使其在太平洋时期成为CIK文件管理器。因此,假设您对此CIK申请者从2019年到2020年提交的10-K和10-Q表单感兴趣,这些表单是原始的或修订的(例如,"FORM 10-K/A“)。

代码语言:javascript
复制
start = 2019
end = 2020
cik = 220000320193
short_cik = str(cik)[-6:] #we will need it later to form urls

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

代码语言:javascript
复制
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文件,其中包含附加到每个特定文件的财务报表。

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
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)

到那时,你会发现苹果的财务状况比你想知道的还要多……

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65215526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档