soup.find(" div",id =" tournamentTable"),无返回 - python 2.7 - BS 4.5.1

时间:2017-01-18 17:10:20

标签: python python-2.7 beautifulsoup

我正在尝试解析以下页面:http://www.oddsportal.com/soccer/france/ligue-1-2015-2016/results/

我感兴趣的部分是获得表格以及得分和赔率。

到目前为止我的代码:

url = "http://www.oddsportal.com/soccer/france/ligue-1-2015-2016/results/"
req = requests.get(url, timeout = 9)
soup = BeautifulSoup(req.text)
print soup.find("div", id = "tournamentTable"), soup.find("#tournamentTable")

>>> <div id="tournamentTable"></div> None

非常简单,但我很奇怪地坚持找到树上的桌子。虽然我发现已经准备好的数据集,但我想知道为什么打印的字符串是标签而没有。

有什么想法吗?

谢谢

2 个答案:

答案 0 :(得分:0)

看起来表格中填充了一个Ajax回调服务器。这就是为什么你打印soup.find("div", id = "tournamentTable")只得到空标签的原因。当您打印soup.find("#tournamentTable")时,您将获得无,因为它正在尝试使用标记“#tournamentTable”查找元素。如果你想使用CSS选择器,你应该使用soup.select()这样的soup.select('#tournamentTable')soup.select('div#tournamentTable'),如果你想更加特别的话。

答案 1 :(得分:0)

首先,这个页面使用JavaScript来获取数据,如果你在浏览器中禁用JS,你会注意到div标签存在但没有任何内容,因此,第一个将打印一个标签。 enter image description here

其次,#是CSS选择器,您无法在find()

中使用它
  

任何未被识别的参数都会变成一个过滤器   标签的属性。

所以,第二个find会找到一些#tournamentTable作为其属性的标记,并且没有任何内容匹配,因此它将返回None