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

爬取SEC网站10-K表格时找不到表格触发索引错误求助

解决SEC EDGAR 10-K表格抓取时的IndexError问题

问题场景

调试抓取SEC网站某公司(CIK=1265107)10-K表格的代码,使用requests、pandas、BeautifulSoup库。请求EDGAR浏览器链接返回成功响应,但查找class为tableFile2的表格并遍历行时触发IndexError: 列表索引超出范围,本质是doc_table为空列表。目标链接:

https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=1265107&type=10-k&dateb=20190101&owner=exclude&start=&output=&count=100

相关代码

导入库:

import requests
import pandas as pd
from bs4 import BeautifulSoup

搜索参数定义:

endpoint = r"https://www.sec.gov/cgi-bin/browse-edgar"

param_dict = {'action':'getcompany',
              'CIK':'1265107',
              'type':'10-k',
              'dateb':'20190101',
              'owner':'exclude',
              'start':'',
              'output':'',
              'count':'100'}

response = requests.get(url = endpoint, params = param_dict)
soup = BeautifulSoup(response.content, 'html.parser')

print('Request Successful')
print(response.url)

问题代码段:

doc_table = soup.find_all('table', class_='tableFile2')

base_url_sec = r"https://www.sec.gov"
master_list = []

# 触发错误的行
for row in doc_table[0].find_all('tr'):
    # 后续逻辑
    pass

错误信息:

IndexError: 列表索引超出范围

问题原因

  1. 反爬拦截:SEC EDGAR会拦截无标识的请求,返回的页面可能是反爬提示页而非目标内容,导致找不到tableFile2表格。
  2. 页面结构变更:目标表格的class属性可能已更新,不再是tableFile2。

修复方案

1. 添加请求头模拟浏览器访问

给requests请求添加User-Agent头,模拟正常浏览器行为,绕过基础反爬:

# 新增请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

# 修改请求,传入headers
response = requests.get(url=endpoint, params=param_dict, headers=headers)

2. 验证页面结构并调整查找逻辑

先打印返回页面的部分内容,确认是否为目标页面:

print(soup.text[:500])  # 打印前500字符,检查是否是反爬提示或结构变化

如果表格class已变更,通过浏览器开发者工具重新定位表格属性,比如改用summary属性查找:

# 替换为实际找到的表格属性
doc_table = soup.find_all('table', {'summary': 'Results'})

3. 添加异常处理避免崩溃

在访问doc_table[0]前先判断列表是否为空:

doc_table = soup.find_all('table', class_='tableFile2')
if not doc_table:
    print("未找到目标表格,请检查请求头或页面结构")
else:
    for row in doc_table[0].find_all('tr'):
        # 处理每行数据的逻辑
        pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:39:17