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
相关产品推荐
相关产品推荐

