You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SEC EDGAR平台idx文件爬取代码失效原因及修改方法咨询

代码失效原因
  • 核心访问拦截问题:SEC EDGAR平台更新了公开访问规则,强制要求所有请求携带合规的User-Agent请求头,明确标注请求方的身份(姓名/所属组织、联系邮箱)。原代码使用requests库默认的python-requests/版本号标识发起请求,会被平台直接拦截返回403状态码,根本无法获取idx文件内容。
  • 解析逻辑鲁棒性不足:原代码依赖split('------')切割表头、替换换行符为|后按固定索引取字段的逻辑,完全绑定了文件的非标准格式细节,只要SEC微调idx文件的分隔线长度、空行数量、字段间隔,就会出现索引错位,无法提取正确条目。
  • 基础语法问题:原代码中for循环前多了一级无效缩进,直接运行会触发缩进语法错误。
  • 冗余导入问题:原代码导入了urllib、BeautifulSoup两个完全未使用的库,属于无效代码。
修复后可运行代码

修复点包括:添加符合SEC要求的请求头、替换为稳定的逐行字段解析逻辑、修正语法问题、移除无效导入。

import requests

master_data = []
file_url = r"https://www.sec.gov/Archives/edgar/daily-index/2020/QTR4/master.20201231.idx"
# 请将下方User-Agent替换为你的真实身份信息,格式为:姓名/组织名 联系邮箱
headers = {
    "User-Agent": "替换为你的姓名/组织名 替换为你的联系邮箱",
    "Accept-Encoding": "gzip, deflate"
}

# 发起请求并校验请求状态
response = requests.get(file_url, headers=headers)
response.raise_for_status()
file_content = response.text

# 定位标准长度分隔线,跳过表头内容
header_separator = "-" * 100
valid_content = file_content.split(header_separator, 1)[1].strip()

# 逐行解析有效数据
for line in valid_content.split("\n"):
    line = line.strip()
    if not line:
        continue
    # idx文件字段间用多空格分隔,拆分后过滤空值得到字段列表
    fields = [field.strip() for field in line.split("  ") if field.strip()]
    if len(fields) < 5:
        continue
    # 字段固定顺序:CIK编号、公司名称、表单类型、提交日期、文件相对路径
    cik, company_name, form_type, submit_date, relative_path = fields[:5]
    # 筛选10-K类型条目
    if form_type == "10-K":
        full_file_url = "https://www.sec.gov/Archives/" + relative_path
        master_data.append([cik, company_name, form_type, submit_date, full_file_url])

print(master_data)

注意事项:SEC对EDGAR平台的请求频率有明确限制,普通用户请求频率不要超过10次/秒,否则会被临时封禁IP。

内容的提问来源于stack exchange,提问作者Julie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.19 16:15:46