我将此代码与beautifulsoup 4.6一起使用。从4.7.1版本开始,此代码向我显示错误。
有人可以帮我在新版本中使用“选择”吗?
import json
from urllib.request import urlopen
from bs4 import BeautifulSoup
url= 'http://www.nordhessen-wetter.de'
u = urlopen(url)
soup = BeautifulSoup(u, 'html.parser')
lufttemperatur = soup.select('td:nth-of-type(10)')[0].text
这是错误消息:
回溯(最近一次通话最后一次):文件“ main.py”,第9行,在 lufttemperatur = soup.select('td:nth-of-type(10)')[0] .text IndexError:列表索引超出范围
答案 0 :(得分:2)
根据您的变量名,我假设您要提取“ C中的Lufttemperatur” /“ Aktuell”值。
如果查看错误,则可以看到数组索引(10)超出范围-这可能是因为BeautifulSoup处理CSS selectors in version 4.7的方式发生了变化,或者可能是由于页面的变化
无论如何,只要稍微改变一下代码,就能获得所需的价值。与其寻找第10个TD,不如寻找第四个TR下的TD,您将获得一个带有Lufttemperatur行的TD的数组:
lufttemperatur = soup.select("tr:nth-of-type(4) > td") # array of TDs
或
lufttemperatur = soup.select("tr:nth-of-type(4) > td")[1] # Aktuell value for Lufttemp.
答案 1 :(得分:0)
lufttemperatur = soup.select('td:nth-of-type(10)')[0]
我认为这将返回一个空列表。
'td:nth-of-type(10)'
我认为意思是“选择作为其父元素的第十个元素的每个元素”。
现在,td的父级是tr。因此,tr中只有4 td。
soup.select('td')[0]
给您您想要的吗?