我在其他帖子中看到了这个错误报告的 comments 和回答,但我找不到在这种情况下为什么会发生这种情况的原因.

这是我的密码.一种在编码中被使用了数百万次的代码? (我应该补充说,完全相同的代码已经运行了很多次,但今天不是这样)

import requests
from bs4 import BeautifulSoup

standings_url = "https://fbref.com/en/comps/9/Premier-League-Stats"
data = requests.get(standings_url)

soup = BeautifulSoup(data.text)
standings_table = soup.select('table.stats_table')[0]

我得到错误消息:

IndexError                                Traceback (most recent call last)
Cell In[6], line 1
1 standings_table = soup.select('table.stats_table')[0]

IndexError: list index out of range

我不明白它怎么会超出射程?我看的不是[0]吗?

你能把这个错误解释到我能理解的最基本的水平吗?我可以在代码中添加什么来阻止这种重复?

非常感谢

推荐答案

碰巧我得到了一个好看的桌上自动取款机,没有错误.

它怎么会超出射程呢?

Web服务器没有发送回常量文档. 它可能会因为许多原因而改变文档内容, 例如由于后端体育馈送中断, 由于大量的客户端请求从您的IP地址, 或者是因为验证码挑战

有时,BS4 Select 器什么也找不到. 让我们使用一个不匹配的"拼写错误" Select 器来重现这个错误.

>>> standings_table = soup.select('table.stats_table')[0]
>>> standings_table = soup.select('table.Ztats_table')[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> 
>>> soup.select('table.Ztats_table')
[]

在没有匹配的情况下, 我们得到的是一份空名单. 没有第一个元素,没有第0个元素, 在一个空的名单里. 因此,引发了一个例外.

我可以在代码中添加什么来阻止这种重复?

判断len(soup.select('table.stats_table')). 如果它大于零,那么一切都很好. 如果为零,则告诉用户"对不起!" 然后继续前进.

每次您成功检索到 统计表的HTML文档, 您可以自由地将其缓存到本地文件系统中. 当您有时检索无法使用的文档时, 或许更可取的做法是退回到 使用旧的缓存文档.

Python相关问答推荐

Python daskValue错误:无法识别的区块管理器dask -必须是以下之一:[]

抓取rotowire MLB球员新闻并使用Python形成表格

如何使用根据其他值相似的列从列表中获取的中间值填充空NaN数据

为什么默认情况下所有Python类都是可调用的?

如何过滤包含2个指定子字符串的收件箱列名?

如何获得每个组的时间戳差异?

为什么抓取的HTML与浏览器判断的元素不同?

什么是最好的方法来切割一个相框到一个面具的第一个实例?

如何从需要点击/切换的网页中提取表格?

将scipy. sparse矩阵直接保存为常规txt文件

在方法中设置属性值时,如何处理语句不可达[Unreacable]";的问题?

在代码执行后关闭ChromeDriver窗口

从源代码显示不同的输出(机器学习)(Python)

在numpy数组中寻找楼梯状 struct

使用tqdm的进度条

在极点中读取、扫描和接收有什么不同?

有没有办法在不先将文件写入内存的情况下做到这一点?

如何使用Polars从AWS S3读取镶木地板文件

如何在不遇到IndexError的情况下将基数10的整数转换为基数80?

Django REST框架+Django Channel->;[Errno 111]连接调用失败(';127.0.0.1';,6379)