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

爬取网页时明明存在匹配元素仍报Index Out Of Range索引越界错误

问题原因

1. 方法调用逻辑错误

BeautifulSoup的find()方法只会返回第一个符合条件的元素,而非所有匹配元素的列表。你当前代码中.text[2]的逻辑是提取第一个匹配元素的文本字符串的第3位字符(Python索引从0开始计数),而非提取第三个匹配元素的内容。如果第一个元素的文本长度不足3位,就会直接触发索引越界错误。

2. 静态页面与渲染后页面不一致

浏览器开发者工具中展示的DOM结构是页面执行完所有JS脚本、动态内容加载完成后的最终结果,而requests.get()仅能获取未执行JS的原始静态HTML源码。如果目标class对应的td元素是页面加载后通过JS动态生成的,那么静态源码中匹配的元素数量会远少于浏览器中看到的5个,就算调整方法后取列表索引也会触发越界。

3. 无效参数错误

你代码中requests.get()传入的第二个参数'r'是无效参数,该参数是文件读取函数open()的模式参数,不需要传给请求方法,错误传参会导致请求逻辑异常,也可能影响返回的页面内容。

修复方案

import bs4
from bs4 import BeautifulSoup
import requests
import lxml

vegas_insider = requests.get('https://www.vegasinsider.com/college-football/matchups/').text
soup = BeautifulSoup(vegas_insider, 'lxml')

# 先获取所有匹配元素的列表
match_list = soup.find_all('td', class_ = 'viCellBg2 cellBorderL1 cellTextNorm padCenter')
# 先打印匹配数量确认是否符合预期
print(f"匹配到的元素数量:{len(match_list)}")
if len(match_list) >= 3:
    closing_line = match_list[2].text.strip()
    print(float(closing_line))
else:
    print("匹配元素不足3个,说明目标内容为JS动态渲染,需要改用Selenium、Playwright等支持JS渲染的爬虫工具抓取")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:54:04