
如何 3 步批量下载美股上市公司年报sec-edgar 实践指南【免费下载链接】sec-edgarDownload all companies periodic reports, filings and forms from EDGAR database.项目地址: https://gitcode.com/gh_mirrors/se/sec-edgar假设你要把苹果、微软、亚马逊近三年的 10-K 年报收进本地目录手动去 EDGAR 网站一页页翻要花大半天。用 sec-edgar一个批量下载 SEC EDGAR 数据库申报文件的 Python 工具同样的活 3 行代码就能跑完文件自动按公司分目录存好。本文按一个真实任务推进先把环境装好跑通第一份年报再逐步加上多公司、时间段和全市场数据的处理。1. 装好环境下载第一份 10-K先拿到代码并装依赖git clone https://gitcode.com/gh_mirrors/se/sec-edgar cd sec-edgar pip install -r requirements.txt然后新建一个 Python 文件写 3 行核心代码from secedgar import filings, FilingType my_filings filings(cik_lookupaapl, filing_typeFilingType.FILING_10K, user_agentYour Name (your.emailexample.com)) my_filings.save(/path/to/save)运行后/path/to/save下会出现1018724/10-K/这样的子目录里面是苹果历年 10-K 的全文文件。有两个参数值得说清楚CIKSEC 给每家上市公司分配的 10 位数字编号是 EDGAR 检索公司用的唯一标识。好消息是你不用记它直接传 aapl 这类股票代号即可工具会自动查表换算逻辑见 secedgar/cik_lookup.py。user_agentSEC 要求访问者标明身份格式就是姓名 (邮箱)。填真实信息不要省略。2. 多公司批量下载一次拉 3 家任务升级不只是苹果还要微软和亚马逊。改一行参数——把字符串换成列表my_filings filings(cik_lookup[aapl, msft, amzn], filing_typeFilingType.FILING_10K, user_agentYour Name (your.emailexample.com)) my_filings.save(/path/to/save)输出目录会按{cik}/{type}自动分好子目录三家公司的文件互不混淆。多公司场景的并发下载逻辑在 secedgar/core/company.py。想控制数量加count10参数每家公司只取最近 10 份适合先试跑再全量。3. 用时间段限定只取近三年上面取的是历年全部 10-K但任务只关心 2019 到 2021 年。加两个日期参数即可from datetime import date my_filings filings(cik_lookup[aapl, msft, amzn], filing_typeFilingType.FILING_10K, start_datedate(2019, 1, 1), end_datedate(2021, 12, 31), user_agentYour Name (your.emailexample.com)) my_filings.save(/path/to/save)end_date不写时默认取今天所以从某年下载到现在这种需求也能覆盖。4. 按天或按季度抓全市场申报换个任务不看某家公司而是想看某天或某一季度整个市场递交了什么。filings()会根据参数自动切换底层策略——单日走 secedgar/core/daily.py 的每日索引整季度走 secedgar/core/combo.py 的季度索引跨季度区间则自动组合两者。# 2021-06-30 当天全市场所有申报 daily filings(start_datedate(2021, 6, 30), user_agentYour Name (your.emailexample.com)) daily.save(/path/to/save) # 2020 年 Q1 全市场申报 q1 filings(start_datedate(2020, 1, 1), end_datedate(2020, 3, 31), user_agentYour Name (your.emailexample.com)) q1.save(/path/to/save)5. 用 entry_filter 只留你需要的文件全市场一天可能有上千份申报但你可能只关心其中的 10-K。传一个返回布尔值的函数给entry_filter每条申报记录都会先过一遍这个过滤器only_10k lambda f: f.form_type.lower() 10-k daily filings(start_datedate(2021, 6, 30), entry_filteronly_10k, user_agentYour Name (your.emailexample.com)) daily.save(/path/to/save)过滤器里能拿到cik、company_name、form_type、date_filed等字段比如只抓银行股f.company_name in (JPMORGAN CHASE, BANK OF AMERICA)。公司维度的filing_typeFilingType.FILING_10K参数同样支持全部申报类型完整枚举列表见 secedgar/core/filing_types.py。6. 处理 SEC 限流避免中途报错 这是新手最常踩的坑429 错误SEC 对单 IP 的访问速率有限制超过约 10 请求/秒会临时封禁。user_agent传真名邮箱、大批量任务分批跑一次 5~10 家公司即可。偶发网络抖动给底层客户端加退避重试多一个参数的事my_filings filings(cik_lookup[aapl, msft], filing_typeFilingType.FILING_10K, user_agentYour Name (your.emailexample.com), backoff_factor1)Jupyter 里报事件循环错误先pip install nest-asyncio然后在 notebook 开头加import nest_asyncio; nest_asyncio.apply()即可。7. 不写代码用命令行跑同样的任务不想写 Python 的话装好后有一条等价的命令secedgar filing --user-agent Your Name (your.emailexample.com) \ --lookups aapl --lookups msft \ --ftype FILING_10K \ --start 20190101 --end 20211231 \ --directory ./out日期格式是YYYYMMDD--count 10可以限制每家公司的份数。secedgar filing --help能看到全部选项。到这里从要一批年报到文件按公司分好目录躺在硬盘上整个过程就是安装、调参、保存三步。sec-edgar 目前专注在申报文件的检索与下载上之后如果把下载下来的文本做指标提取或结构化可以在这套目录结构上继续加工——下载这一层已经不用你操心了。【免费下载链接】sec-edgarDownload all companies periodic reports, filings and forms from EDGAR database.项目地址: https://gitcode.com/gh_mirrors/se/sec-edgar创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考