Windows11+Python3调用SEC API获取filings遇请求限制错误求助
解决SEC EDGAR请求错误:未声明的自动化工具/速率阈值超出
问题背景
环境:Windows 11、Python 3
尝试获取SEC filings时触发错误:请求速率阈值超出 - 你的请求来自未声明的自动化工具。已按官方示例配置请求头,仅发起单次请求,仍触发错误,怀疑是User Agent与限流的组合问题。
原代码:
def get01(): myHeaders = { "User-Agent": "Example_Company admin@example.com", "Accept-Encoding": "gzip, deflate", "Host": "www.sec.gov" } url = "https://www.sec.gov/Archives/edgar/data/2062466/000206246625000004/wk-form4_1743625808.xml" response = requests.get(url, myHeaders) print(response.text)
核心原因
错误提示里的“速率阈值超出”是通用模板,实际问题并非限流(单次请求远低于10次/秒的官方限制),而是:
- 使用了SEC识别为无效的示例User-Agent
- 请求头传递方式错误,导致SEC未接收到你的合法声明
解决方案
替换为真实的User-Agent信息
SEC要求User-Agent必须包含真实的个人/组织名称+有效联系邮箱,不能使用示例中的"Example_Company admin@example.com"。比如改为:"User-Agent": "张三 zhangsan@example.com"
邮箱需要是可联系到你的真实地址,这是SEC区分合法自动化请求和恶意爬虫的关键。修正请求头的传递方式
原代码中直接把请求头传给requests.get的第二个参数,该参数实际是用于URL查询参数的params,正确做法是用headers关键字参数传递:def get01(): myHeaders = { "User-Agent": "你的真实名称 your-real-email@example.com", "Accept-Encoding": "gzip, deflate", "Host": "www.sec.gov" } url = "https://www.sec.gov/Archives/edgar/data/2062466/000206246625000004/wk-form4_1743625808.xml" response = requests.get(url, headers=myHeaders) # 此处必须指定headers= print(response.text)这是解决问题的核心——之前的请求头根本没被正确发送,导致SEC识别为未声明的自动化工具。
检查IP是否被临时限制
如果你的IP之前有过频繁请求记录(比如测试时多次重试),可能被SEC临时封禁。可以等待10分钟后重试,或切换网络(如手机热点)验证是否是IP问题。批量请求时添加延迟
若后续需要批量获取 filings,建议在每次请求后添加至少1秒的延迟,避免触发速率限制:import time # 请求完成后添加延迟 time.sleep(1)
内容的提问来源于stack exchange,提问作者kmiklas
相关产品推荐
相关产品推荐

