【问题标题】:soup.find("div", id = "tournamentTable"), None returned - python 2.7 - BS 4.5.1soup.find("div", id = "tournamentTable"), 没有返回 - python 2.7 - BS 4.5.1
【发布时间】:2017-01-18 17:10:20
【问题描述】:

我正在尝试解析以下页面: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

非常简单,但我因此奇怪地卡在树中查找表。虽然我找到了已经准备好的数据集,但我想知道为什么打印的字符串是标签而没有。

有什么想法吗?

谢谢

【问题讨论】:

    标签: python python-2.7 beautifulsoup


    【解决方案1】:

    首先,这个页面使用 JavaScript 来获取数据,如果你在浏览器中禁用 JS,你会注意到 div 标签存在,但其中没有,所以,第一个将打印单个标签。

    第二,#是CSS选择器,不能在find()中使用

    任何未被识别的参数都将被转换为一个过滤器 标签的属性。

    所以,第二个find 会找到一些带有#tournamentTable 属性的标签,没有任何匹配,所以它会返回None

    【讨论】:

      【解决方案2】:

      看起来该表填充了一个对服务器的 Ajax 调用。这就是为什么你打印soup.find("div", id = "tournamentTable") 你只得到空标签的原因。当您打印 soup.find("#tournamentTable") 时,您会得到 None,因为它正在尝试查找带有 tag“#tournamentTable”的元素。如果你想使用 CSS 选择器,你应该使用 soup.select() 这样,soup.select('#tournamentTable')soup.select('div#tournamentTable') 如果你想更具体。

      【讨论】:

        猜你喜欢
        • 2018-05-23
        • 2020-11-12
        • 2014-08-22
        • 1970-01-01
        • 1970-01-01
        • 2018-11-14
        • 2023-04-01
        • 1970-01-01
        • 2012-05-06
        相关资源
        最近更新 更多