BeautifulSoup网络爬取SEC Edgar 10-K和10-Q文件

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_2019filings_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_2019filings_2020列表中的文件链接,构建完整的URL,然后指定保存文件的文件名,最后使用urlretrieve函数下载文件到本地。

通过这种方式,我们可以获取到SEC Edgar中的财务报表文件,并进行后续的数据处理和分析。

总结

本文介绍了如何使用BeautifulSoup库进行网络爬取,以获取SEC Edgar中的10-K和10-Q文件。通过构建特定的URL,我们可以获取到不同公司、不同年份和不同类型的文件链接。然后,使用BeautifulSoup解析HTML内容,提取我们需要的信息。最后,我们可以对这些文件链接进行进一步处理,例如,下载文件或者进行数据分析。

美国SEC Edgar网站提供了丰富的财务和公司信息,这对于投资者、研究人员和分析师来说是非常有价值的资源。通过学习网络爬虫和使用BeautifulSoup库,我们可以更有效地利用这些信息来支持我们的研究和分析工作。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程