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

使用BeautifulSoup爬取OddsChecker出现索引错误的问题咨询

错误原因排查与解决方案

list index out of range错误触发的直接原因是page_soup.select()返回的列表元素数量小于2,你尝试访问索引为1的第二个元素时超出了列表下标范围,具体诱因可以从以下几个方向排查:

可能的诱因

  • 反爬机制拦截
    若请求被目标网站的反爬策略拦截,返回的内容会是验证码页面、403拒绝访问页面等非目标赛事页面,页面内不存在包含Both Teams To Score文本的h2标签,select()会返回空列表,直接取[1]就会触发索引错误。
  • 页面结构更新
    目标网站可能调整了前端页面结构:
    1. 包含Both Teams To Score文本的标签不再是h2标签,或文本内容发生了空格、大小写、表述调整,导致没有匹配到任何元素
    2. 匹配到的符合条件的h2标签数量不足2个,比如当前仅存在1个符合条件的标签,访问索引1自然越界
  • 解析器适配问题
    内置的html.parser对部分不规范的HTML结构解析效果不佳,可能会出现元素漏识别的情况。

修复方案

  1. 先验证请求是否正常
    增加状态码和返回内容校验,确认你拿到的是正常的目标页面:
    # 打印请求状态码,正常应为200
    print(req.status_code)
    # 确认返回内容包含目标文本
    print("Both Teams To Score" in req.text)
    
    若状态码非200或返回内容不存在目标文本,说明被反爬拦截,可更换更新的User-Agent、补充Referer、Cookie等请求头字段,或使用代理IP解决。
  2. 避免硬编码索引
    先校验匹配到的元素数量再取值,不要直接固定写死索引:
    match_h2_list = page_soup.select('h2:-soup-contains("Both Teams To Score")')
    print(f"匹配到的h2标签数量:{len(match_h2_list)}")
    if len(match_h2_list) >= 2:
        market_id = match_h2_list[1]["aria-controls"]
    else:
        # 自行处理异常场景,比如输出页面内容排查结构变化
        print("匹配元素不足,无法获取market_id")
    
  3. 优化元素定位方式
    文本匹配的定位方式稳定性极低,建议优先通过标签的class、id、父容器的固定属性等更稳定的特征定位元素,也可更换lxml作为解析器提升识别准确率:
    page_soup = BeautifulSoup(req.content, "lxml")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:15:03