【问题标题】:bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: html5lib. Do you need to install a parser library?bs4.FeatureNotFound:找不到具有您请求的功能的树生成器:html5lib。您需要安装解析器库吗?
【发布时间】:2017-11-17 18:55:18
【问题描述】:

这个问题类似于this one。 我已经阅读了答案,但没有一个对我有用。 我正在尝试从this site 的蓝色框中获取信息。

这是我写的:

import requests
from bs4 import BeautifulSoup
import re

url = 'https://boardgamegeek.com/boardgame/161936/pandemic-legacy-season-1'

req = requests.get(url)
soup = BeautifulSoup(req.text,'html5lib')
soup = soup.find('div', class_='game-header-body')

print(soup.prettify())

我收到此错误AttributeError: 'NoneType' object has no attribute 'prettify'。原因是因为找不到'game-header-body',所以变成NoneType。当我删除soup = soup.find('div', class_='game-header-body') 行时,我可以看到除我感兴趣的 div 之外的所有 html 代码。

我已经读过,也许改用“html5lib”解析器库会更好。我通过pip3 install html5lib 安装了它(我使用的是python 3.4.3),但仍然出现上述错误。我该怎么办?

【问题讨论】:

  • 您好,页面源中不存在 game-header-body 元素,它是由 javascript 加载的。所以,你需要 selenium,它会加载 javascript,然后你可以提取。

标签: python html python-3.x parsing beautifulsoup


【解决方案1】:

元素 game-header-body 不存在于 HTML 源代码中,但稍后由 javascript 呈现。你需要像 selenium 这样的东西来帮助解决这个问题。它可以加载您选择的浏览器(如果需要,包括无标题的浏览器),然后将为您执行 javascript。然后,您可以在页面完全加载后访问生成的 HTML,并使用 BeautifulSoup 对其进行解析。

以下是如何使用已安装的 Firefox 浏览器完成此操作的示例:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

url = 'https://boardgamegeek.com/boardgame/161936/pandemic-legacy-season-1'

browser = webdriver.Firefox(firefox_binary=FirefoxBinary())
browser.get(url)
soup = BeautifulSoup(browser.page_source, "html.parser")
browser.quit()

for div in soup.find_all('div', class_='game-header-body'):
    print(div.prettify())
    print("----------------")

注意,有多个game-header-body div,所以这会显示所有的。

【讨论】:

  • 非常感谢,成功了!只有一件事:你能解释一下这行吗:from selenium.webdriver.firefox.firefox_binary import FirefoxBinary?我尝试删除它并删除webdriver.Firefox() 参数,它似乎工作相同。有必要吗?为什么会这样?
  • 不同版本的 selenium 需要不同的设置,这只是我使用过的一种,我知道它仍然适用于我的版本。如果另一个对你有用,那也很好。
猜你喜欢
  • 2017-02-28
  • 2020-07-09
  • 2018-06-14
  • 2019-05-16
  • 2020-07-02
  • 2018-09-24
  • 2017-02-20
  • 1970-01-01
相关资源
最近更新 更多