BeautifulSoup网络爬取SEC Edgar 10-K和10-Q文件
在本文中,我们将介绍使用BeautifulSoup库来进行网络爬虫,以获取SEC Edgar 10-K和10-Q文件的方法。SEC(美国证券交易委员会)是美国的监管机构,Edgar是其提供的公开数据库,其中包含了美国上市公司的财务报表和其他重要信息。通过网络爬取SEC Edgar的文件,我们可以获取到各个公司的年度和季度报告,进行数据分析和研究。
阅读更多:BeautifulSoup 教程
什么是BeautifulSoup?
BeautifulSoup是一个Python库,用于解析HTML和XML文档,提供了一种简单和灵活的方式来抽取其中的数据。它能够将复杂的HTML文档转换为树状结构,然后我们可以使用Python来遍历这个树状结构,提取我们需要的信息。
网络爬取SEC Edgar文件
首先,我们需要了解SEC Edgar网站的结构和URL的构成。SEC Edgar的文件可以通过一个特定的URL来访问,其中包含了公司的CIK(Central Index Key)代码、文档类型(10-K或10-Q)和年份。我们可以构建不同的URL来获取不同公司、不同年份和不同类型的文件。
接下来,我们将使用BeautifulSoup和Python来进行网络爬取。首先,我们需要导入相关的库:
import requests
from bs4 import BeautifulSoup
然后,我们可以定义一个函数来获取特定URL上的HTML内容:
def get_html(url):
response = requests.get(url)
return response.text
接着,我们可以使用BeautifulSoup来解析HTML内容,并提取我们需要的信息。假设我们要获取某个公司2020年的10-K文件,我们可以使用以下代码:
def get_filings(cik, year, doc_type):
url = f"https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK={cik}&type={doc_type}&dateb=&owner=exclude&count=100"
html = get_html(url)
soup = BeautifulSoup(html, 'html.parser')
filings = []
table = soup.find('table', {'class': 'tableFile2'})
rows = table.find_all('tr')[1:]
for row in rows:
cells = row.find_all('td')
if len(cells) >= 5:
filing_year = cells[3].text.strip()
filing_type = cells[0].text.strip()
filing_doc = cells[1].find('a').get('href')
if filing_year == year and filing_type == doc_type:
filings.append(filing_doc)
return filings
在上述代码中,我们首先定义了一个空列表filings
,用于存储获取到的文件链接。然后,我们找到页面中的文件列表的HTML表格,并遍历每一行,提取每一行中的相关信息。我们通过判断文件的年份和类型是否与我们要求的一致,来确定是否将该文件链接加入到filings
列表中。
示例说明
为了更好地理解上述代码的使用,我们以美国苹果公司(AAPL)为例,来获取该公司2019年和2020年的10-K文件。首先,我们需要获得AAPL的CIK代码,可以通过SEC Edgar网站上的搜索功能来获取。
通过搜索功能,我们可以找到AAPL的CIK代码为0000320193。然后,我们使用以下代码来获取AAPL的2019年和2020年的10-K文件链接:
cik = "0000320193"
year = "2019"
doc_type = "10-K"
filings_2019 = get_filings(cik, year, doc_type)
year = "2020"
filings_2020 = get_filings(cik, year, doc_type)
此时,filings_2019
和filings_2020
分别存储了AAPL的2019年和2020年的10-K文件链接。我们可以通过遍历这两个列表来下载文件或者进一步处理这些链接。这里我们以下载文件为例:
import urllib
# 下载文件
for filing in filings_2019:
url = "https://www.sec.gov" + filing
filename = filing.split("/")[-1]
urllib.request.urlretrieve(url, filename)
for filing in filings_2020:
url = "https://www.sec.gov" + filing
filename = filing.split("/")[-1]
urllib.request.urlretrieve(url, filename)
上述代码中,我们使用urllib
库中的urlretrieve
函数来下载文件。我们通过遍历filings_2019
和filings_2020
列表中的文件链接,构建完整的URL,然后指定保存文件的文件名,最后使用urlretrieve
函数下载文件到本地。
通过这种方式,我们可以获取到SEC Edgar中的财务报表文件,并进行后续的数据处理和分析。
总结
本文介绍了如何使用BeautifulSoup库进行网络爬取,以获取SEC Edgar中的10-K和10-Q文件。通过构建特定的URL,我们可以获取到不同公司、不同年份和不同类型的文件链接。然后,使用BeautifulSoup解析HTML内容,提取我们需要的信息。最后,我们可以对这些文件链接进行进一步处理,例如,下载文件或者进行数据分析。
美国SEC Edgar网站提供了丰富的财务和公司信息,这对于投资者、研究人员和分析师来说是非常有价值的资源。通过学习网络爬虫和使用BeautifulSoup库,我们可以更有效地利用这些信息来支持我们的研究和分析工作。