如何使用Python的SEC Edgar API筛选指定日期与关键词的申报文件?
解决sec_edgar_api添加日期范围与关键词筛选的问题
get_submissions方法仅返回目标CIK的全量提交元数据,不支持直接嵌入日期范围和关键词筛选逻辑。要复现Edgar官网的搜索功能,需分两步实现:先筛选指定日期范围内的提交文件,再对文件内容做关键词匹配。
步骤1:筛选指定日期范围的提交文件
从返回的submissions字典中提取提交记录,通过filingDate或reportDate字段过滤日期区间:
from sec_edgar_api import EdgarClient from datetime import datetime edgar = EdgarClient(user_agent="<Sample Company Name> <Admin Contact>@<Sample Company Domain>") # 配置目标参数 target_cik = "104169" start_date = datetime(2023, 1, 1) end_date = datetime(2023, 12, 31) # 获取全量提交记录(开启自动分页) submissions = edgar.get_submissions(cik=target_cik, handle_pagination=True) filtered_filings = [] # 过滤近期提交 for filing in submissions['filings']['recent']: filing_date = datetime.strptime(filing['filingDate'], "%Y-%m-%d") if start_date <= filing_date <= end_date: filtered_filings.append(filing) # 过滤历史分页提交 if 'files' in submissions['filings']: for file_entry in submissions['filings']['files']: for filing in file_entry['filings']: filing_date = datetime.strptime(filing['filingDate'], "%Y-%m-%d") if start_date <= filing_date <= end_date: filtered_filings.append(filing)
步骤2:对筛选文件进行关键词匹配
通过get_filing_url获取文件链接,下载内容后检查是否包含目标关键词:
import requests import time target_keywords = ["sustainability", "carbon emissions"] matched_filings = [] for filing in filtered_filings: # 获取提交文件的完整URL filing_url = edgar.get_filing_url( cik=target_cik, accession_number=filing['accessionNumber'], primary_doc=filing['primaryDocument'] ) # 请求文件内容(添加延迟避免触发反爬) time.sleep(1) response = requests.get(filing_url) response.raise_for_status() filing_content = response.text.lower() # 匹配关键词(忽略大小写) if any(keyword.lower() in filing_content for keyword in target_keywords): matched_filings.append({ 'cik': target_cik, 'form_type': filing['form'], 'filing_date': filing['filingDate'], 'accession_number': filing['accessionNumber'], 'url': filing_url }) # 输出匹配结果 for item in matched_filings: print(f"匹配文件: 表单类型{item['form_type']} | 提交日期{item['filing_date']} | 链接{item['url']}")
关键注意事项
- 必须填写合规的
user_agent,SEC要求包含实体名称和联系方式,否则请求会被拦截。 - 若遇到PDF格式的提交文件,需使用PyPDF2等库解析文本后再做关键词匹配。
- 严格控制请求频率,避免触发SEC的访问限制。
内容的提问来源于stack exchange,提问作者Deep_S
相关产品推荐
相关产品推荐

