Py学习  »  Python

数据爬取:美国证监会EDGAR系统数据获取及Python实现

连享会 • 5 月前 • 381 次点击  

👇 连享会 · 推文导航 | www.lianxh.cn

图片
图片

作者: 吴浩然 (巴斯大学)
邮箱: hw2258@bath.ac.uk

温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:


目录

  • 1. 背景介绍

    • 1.1 EDGAR 系统

    • 1.2 研究中的 EDGAR 系统

    • 1.3 EDGAR 系统数据获取

  • 2. Python 代码介绍

    • 2.1 CIK信息获取

    • 2.2 披露信息概览

    • 2.3 XBRL 数据API

    • 2.4 报告文件下载

  • 3. 参考资料

  • 4. 相关推文



1. 背景介绍

1.1 EDGAR 系统

1996 年,美国证券交易委员会 (SEC, Security Exchange Commission) 规定所有的信息披露义务人(美国上市公司)都必须进行电子化入档。EDGAR 系统随之应运而生,其全称为 Electronic Data Gathering, Analysis and Retrieval system,即电子化的收集、分析和获取披露信息的系统。SEC 官方网站对 EDGAR 的介绍中明确提出,建立 EDGAR 系统的目的是为电子化入档人提供便利,提高美国证监会信息处理的速度和效率,使投资者、金融机构和其他人士能够及时获得市场信息。根据要求,信息披露义务人必须向 EDGAR 系统注册并披露各类信息,包括阶段性财务报告(如 10-Q 季报、10-K 年报等)和其他应披露文件。

1.2 研究中的 EDGAR 系统

研究表明,作为信息技术外生冲击,EDGAR 系统的实施大幅降低了公司信息披露成本,改善了投资者与企业的信息不对称,增加了公司股票流动性,降低了股本成本,提高了股权融资水平,从而提升了公司的经营业绩 (Goldstein, Yang and Zuo, 2023; Gomez, 2023)。另外,Ni, Wang and Yin (2021) 发现 EDGAR 系统的实施导致了股票流动性的增加和投资者对公开披露的依赖增加,从而加剧了公司管理层隐瞒坏消息的动机。

此外,在以往的金融和会计研究中,EDGAR 系统在数据部分也扮演了重要角色。例如,Griffin (2003) 调查了投资者对1996年至2001年间提交的 10-K 和 10-Q 报告的反应,发现股票超额收益的绝对值在提交日期当天以及提交日期后的一到两天更大。Muslu et al. (2015) 通过 10-K 文件中管理层讨论和分析(MD&A)部分的前瞻性披露,发现当公司的股价信息效率较低时,即当其股价不能很好地反映未来盈利信息时,公司会做出更具前瞻性的 MD&A 披露。这项研究的数据处理流程为:

  1. 从美国证券交易委员会 EDGAR 数据库下载 1993 财年至 2009 财年的所有 10-K 文件;
  2. 从 10-K 文件中提取 MD&A 部分;从 MD&A 部分提取前瞻性句子;
  3. 分析了前瞻性语句的性质。

很多学者通过文本分析方法从披露文件中提取了各种信息用于研究。比如,使用 10-K 文本来衡量财务约束 (Bodnaruk, Loughran and McDonald, 2015),10-K 文件的情感分析 (Azimi and Agrawal, 2021)。这里就不一一赘述了。

1.3 EDGAR 系统数据获取

我们先看下如何手动从EDGAR系统中下载文件:我们首先进入 EDGAR 公司搜索页面 (https://www.sec.gov/edgar/searchedgar/companysearch), 以美国苹果公司为例,我们接着输入苹果公司的 Ticker - AAPL,即可点击链接进入披露文件页面,然后我们就可以根据自己的需要(日期、类别等)下载所需的文件。这里给出一些常见的文件类型代码,如

  • 10-Q(季报)
  • 10-K(年报)
  • 20-F(注册地不在美国的公司年报)
  • 8-K(重要事项披露,如股份回购)
  • 13D(股东单独或合并持有5%以上公司股份公告)

更多的文件类型说明清单详见 https://www.sec.gov/forms。

然而,在学术研究中,我们经常需要批量下载多个公司、较长时间跨度的披露文件。在这种情况下,手动下载的方式就不可取了,因为会花费我们大量的时间和精力。而这时,Python就可以闪亮登场了。

2. Python 代码介绍

SEC 提供了 API 接口的详细说明,感兴趣的同学可以去这个链接 (https://www.sec.gov/edgar/sec-api-documentation) 查看。由于篇幅关系,在此次推文中,我们只介绍Python获取 EDGAR 数据的部分基本样例,更全面的一站式数据下载方法可查阅参考资料给出的链接。

2.1 CIK信息获取

EDGAR 在申报人向美国证券交易委员会注册并披露文件时,会为其分配一个唯一的10位数字标识符,称为中央索引密钥 (Central Index Key, CIK)。CIK 编号对申报人来说是唯一的,它们不会被回收。我们可以通过以下Python代码获取公司的 CIK 信息。

# import modules
import requests
import pandas as pd
# create request header
# please input your own email address
headers = {'User-Agent'"hw2258@bath.ac.uk"}
# get all companies data
companyTickers = requests.get(
    "https://www.sec.gov/files/company_tickers.json",
    headers=headers
    )
# dictionary to dataframe
companyData = pd.DataFrame.from_dict(companyTickers.json(),orient='index')
# add leading zeros to CIK
companyData['cik_str'] = companyData['cik_str'].astype(str).str.zfill(10)

2.2 披露信息概览

通过以下代码,我们可以获取美国苹果公司近期的 10-K 文件披露信息。

CIK = companyData[companyData['ticker']=="AAPL"]['cik_str'][0]
# get company specific filing metadata
filings = requests.get(
    f'https://data.sec.gov/submissions/CIK{CIK}.json',
    headers=headers
    )
# dictionary to dataframe
filingsForms = pd.DataFrame.from_dict(
             filings.json()['filings']['recent']
             )
# filter only Annual reports
annualForms = filingsForms[filingsForms['form']=='10-K']

2.3 XBRL 数据API

可扩展业务标记语言 (Extensible Business Markup Language, XBRL) 是一种基于XML的财务报表报告格式,被美国证券交易委员会和世界各地的金融监管机构使用。如果有同学有过基金公司运营或合规部门的实习经验,肯定经常听到 XBRL 这个名词。

XBRL 标准将复杂的财务报告切分为一个个原子的财务事实数据 (facts)、财务分类 (taxonomies)。为了便于大家理解,我从 XBRL 官方网站 (https://www.xbrl.org/the-standard/how/getting-started-for-developers/) 中截取了一段英文说明

XBRL includes Concepts, Taxonomies, Values, Contexts, Facts, Instances and Dimensions. By combining a concept (profit) from a taxonomy (say Canadian GAAP) with a value (1000) and the needed context (Acme Corporation, for the period 1 January 2015 to 31 January 2015 in Canadian Dollars) we arrive at a fact. Collections of facts in XBRL are contained in documents called instances.

当然,不知道这些细节并不妨碍我们获取数据。

通过以下 Python 代码可获取一些财务信息。

# get company facts data
# companyfacts API returns all the company concepts data for a company into a single API call
companyFacts = requests.get(
    f'https://data.sec.gov/api/xbrl/companyfacts/CIK{CIK}.json',
    headers=headers
    )
# get the current assets values
curr_assets_df_1 = pd.DataFrame(companyFacts.json()["facts"]["us-gaap"]["AssetsCurrent"]["units"]["USD"])

# get company concept data
# company-concept API returns all the XBRL disclosures from a single company (CIK) and concept\
    # (a taxonomy and tag) into a single JSON file, with a separate array of facts for each units \
        # on measure that the company has chosen to disclose (e.g. net profits reported in \
            # U.S. dollars and in Canadian dollars).
companyConcept = requests.get(
    (
    f'https://data.sec.gov/api/xbrl/companyconcept/CIK{CIK}'
     f'/us-gaap/AssetsCurrent.json'
    ),
    headers=headers
    )
curr_assets_df_2 = pd.DataFrame(companyConcept.json()["units"]["USD"])

2.4 报告文件下载

前面我们介绍的都是如何通过 EDGAR Data API 获取信息。而在实际研究中,我们最常用的应该还是通过Python爬取 EDGAR 网站下载披露文件并解析数据。值得注意的是,对 EDGAR 数据访问,美国证监会限制为每秒钟 10 个请求,以确保每个客户端都能够公平获取数据。由于此部分代码较长,大家可访问参考资料中的链接获取相关文件。

3. 参考资料

  • Azimi, M., & Agrawal, A. (2021). Is Positive Sentiment in Corporate Annual Reports Informative? Evidence from Deep Learning. The Review of Asset Pricing Studies, 11(4), 762–805. -Link-, -PDF-.
  • Bodnaruk, A., Loughran, T., & McDonald, B. (2015). Using 10-K Text to Gauge Financial Constraints. Journal of Financial and Quantitative Analysis, 50(4), 623–646. -Link-, -PDF-.
  • Gao, M., & Huang, J. (2019). Informing the Market: The Effect of Modern Information Technologies on Information Production. The Review of Financial Studies, 33(4), 1367–1411. -Link-, -PDF-.
  • Goldstein, I., Yang, S., & Zuo, L. (2023). The Real Effects of Modern Information Technologies: Evidence from the EDGAR Implementation. Journal of Accounting Research, 61(5), 1699–1733. Portico. -Link-, -PDF-.
  • Gomez, E. A. (2023). The Effect of Mandatory Disclosure Dissemination on Information Asymmetry among Investors: Evidence from the Implementation of the EDGAR System. The Accounting Review, 1–23. -Link-, -PDF-.
  • Griffin, P.A., 2003. Got information? Investor response to Form 10-K and Form 10-Q EDGAR filings. Review of Accounting Studies, 8, pp.433-460.
  • Muslu, V., Radhakrishnan, S., Subramanyam, K.R. and Lim, D., 2015. Forward-looking MD&A disclosures and the information environment. Management Science, 61(5), pp.931-948.
  • Ni, X., Wang, Y. and Yin, D., 2021. Does modern information technology attenuate managerial information hoarding? evidence from the Edgar implementation. Journal of Corporate Finance, 71, p.102100.
  • Python Workshop on Web Data Extraction. -Link-
  • EDGAR-CRAWLER: Unlock the Power of Financial Documents. Github: https://github.com/nlpaueb/edgar-crawler.
  • EDGAR-CORPUS on Zenodo. EDGAR-CORPUS: The biggest corpus for financial NLP research, built from EDGAR-CRAWLER https://zenodo.org/record/5528490
  • EDGAR-CORPUS on HuggingFace datasets. https://huggingface.co/datasets/eloukas/edgar-corpus/
  • Financial Word2Vec Embeddings. EDGAR-W2V: `Word2vec`` Embeddings trained on EDGAR-CORPUS. https://zenodo.org/record/5524358


4. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 爬取 数据库
安装最新版 lianxh 命令:
ssc install lianxh, replace

  • 专题:数据处理
    • 初虹, 2022, Stata数据处理:一文搞定CEIC数据库, 连享会 No.923.
    • 宋森安, 2022, CHARLS-中国健康与养老调查数据库清洗(二), 连享会 No.918.
    • 宋森安, 李青塬, 2022, CHARLS-中国健康与养老调查数据库清洗(一), 连享会 No.896.
    • 张春雷, 2023, 多变量排序问题:以中国工业企业数据库为例, 连享会 No.1146.
    • 涂冰倩, 2021, Stata数据处理:一文读懂微观数据库清理(上), 连享会 No.686.
    • 涂冰倩, 2021, Stata数据处理:一文读懂微观数据库清理(下), 连享会 No.687.
    • 连享会, 2020, Stata数据处理:import-fred-命令导入联邦储备经济数据库-FRED, 连享会 No.315.
  • 专题:数据分享
    • 初虹, 2022, Stata:CSMAR数据库API介绍, 连享会 No.884.
    • 徐萌萌, 2020, 连享会:数据在哪儿?常用数据库链接, 连享会 No.69.
    • 李青塬, 2021, Stata:CHFS中国家庭金融调查数据库清洗和处理-D121, 连享会 No.667.
    • 沙莎, 2020, 连享会 - 人文社科开放数据库汇总, 连享会 No.74.
    • 沙莎, 2019, 连享会 - 人文社科开放数据库汇总, 连享会 No.7.
    • 沙莎, 2022, 重磅!数据库:国家人口健康-青少年健康数据库, 连享会 No.943.
    • 申维冰, 2021, 金融数据哪里找:Tushare数据平台, 连享会 No.676.
    • 赵雨鑫, 2023, 数据库分享:年报文本语气数据库, 连享会 No.1225.
    • 连享会, 2020, 数据分享——EPS数据库-新冠肺炎疫情实时监控平台, 连享会 No.23.
    • 陈波, 2021, Stata数据处理:清洗CFPS数据库, 连享会 No.612.
  • 专题:文本分析-爬虫
    • 李岸瑶, 2021, Stata爬虫:爬取地区宏观数据, 连享会 No.684.
    • 李岸瑶, 2021, Stata爬虫:爬取A股公司基本信息, 连享会 No.685.
    • 李青塬, 2022, Stata+Python:同花顺里爬取创历史新高的股票, 连享会 No.957.
    • 李青塬, 2022, Stata+Python:爬取创历史新高股票列表, 连享会 No.894.
    • 梁海, 2020, Python:爬取东方财富股吧评论进行情感分析, 连享会 No.440.
    • 游万海, 2020, Stata爬虫-正则表达式:爬取必胜客, 连享会 No.287.
    • 陈卓然, 2023, Python:爬虫雅虎财经数据-selenium, 连享会 No.1306.
  • 专题:Python-R-Matlab
    • 周豪波, 2020, Python 调用 API 爬取百度 POI 数据小贴士——坐标转换、数据清洗与 ArcGIS 可视化, 连享会 No.20.
    • 孔亦泽, 2023, 分享:公开数据库 及 数据格式转换-R-Stata-Python, 连享会 No.1272.
    • 孙斯嘉, 2020, Python 调用 API 爬取百度 POI 数据, 连享会 No.60.
    • 左从江, 2020, Python: 批量爬取下载中国知网(CNKI) PDF论文, 连享会 No.54.
    • 王颖, 2022, Python爬取静态网站:以历史天气为例, 连享会 No.921.
    • 王颖, 2022, Python:爬取动态网站, 连享会 No.932.
    • 秦利宾, 2020, Python:爬取上市公司公告-Wind-CSMAR, 连享会 No.131.
    • 秦利宾, 2021, Python:爬取巨潮网公告, 连享会 No.646.
    • 范思妤, 2023, Python:基于selenium爬取科创板审核问询, 连享会 No.1172.
    • 许梦洁, 2020, Python: 如何优雅地管理微信数据库?, 连享会 No.90.
    • 许梦洁, 2021, Python爬虫:从SEC-EDGAR爬取股东治理数据-Shareholder-Activism, 连享会 No.744.
    • 许梦洁, 2021, Python爬虫:爬取华尔街日报的全部历史文章并翻译, 连享会 No.743.
  • 专题:Stata命令
    • 朱红兵, 2020, Stata新命令:readWind-快速读入并转换万德数据, 连享会 No.339.
        

图片

尊敬的老师 / 亲爱的同学们:

连享会致力于不断优化和丰富课程内容,以确保每位学员都能获得最有价值的学习体验。为了更精准地满足您的学习需求,我们诚挚地邀请您参与到我们的课程规划中来。请您在下面的问卷中,分享您 感兴趣的学习主题或您希望深入了解的知识领域 。您的每一条建议都是我们宝贵的资源,将直接影响到我们课程的改进和创新。我们期待您的反馈,因为您的参与和支持是我们不断前进的动力。感谢您抽出宝贵时间,与我们共同塑造更加精彩的学习旅程!https://www.wjx.cn/vm/YgPfdsJ.aspx# 再次感谢大家宝贵的意见!

图片

图片

New!  Stata 搜索神器:lianxh 和 songbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
  . ssc install lianxh
  . ssc install songbl
👉  使用:
  . lianxh DID 倍分法
  . songbl all

图片

🍏 关于我们

  • 连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。
图片

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/178937
 
381 次点击