如何在Beautiful Soup 4.7.1中使用“选择”?

时间:2019-01-28 12:34:39

标签: python beautifulsoup

我将此代码与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:列表索引超出范围

live version of this code on repl.it

2 个答案:

答案 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]给您您想要的吗?