IndexError: list index out of range错误原因及解决方法咨询
爬取fbref时遇到IndexError的问题解答
错误原因解释
soup.select('table.stats_table')是从网页里筛选所有带stats_table类的表格,返回的是一个列表。你写[0]是想取列表里第一个表格,但报错“索引越界”,本质是这个列表是空的——网页里根本没找到符合条件的表格。
之前正常现在突然报错,大概率是两个原因:要么目标网站(fbref)修改了网页结构,表格的类名不再是stats_table;要么网站的反爬机制把你的请求识别成了机器人,返回的不是正常的联赛统计页面(比如返回了验证页、空白页),自然找不到目标表格。
防错改进措施
- 先验证请求是否成功:在解析网页前,先检查请求的状态码,只有状态码为200时才继续处理:
if data.status_code != 200: print(f"请求失败,状态码:{data.status_code}") exit() - 先判断列表非空再取值:不要直接用
[0]强行取第一个元素,先确认列表里有内容:standings_tables = soup.select('table.stats_table') if standings_tables: standings_table = standings_tables[0] else: print("未找到目标表格,请检查网页结构或类名是否变化") # 这里可以添加日志记录或其他异常处理逻辑 - 模拟浏览器请求规避反爬:给请求添加请求头,伪装成正常浏览器访问:
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' } data = requests.get(standings_url, headers=headers) - 打印返回内容排查问题:如果还是找不到表格,打印
data.text[:500](返回内容的前500字符),看看返回的是不是正常的页面,有没有反爬验证的提示。
内容的提问来源于stack exchange,提问作者user23359383
相关产品推荐
相关产品推荐

