Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python bs4.FeatureNotFound:找不到具有您请求的功能的树生成器:html5lib。您需要安装解析器库吗?_Python_Html_Python 3.x_Parsing_Beautifulsoup - Fatal编程技术网

Python bs4.FeatureNotFound:找不到具有您请求的功能的树生成器:html5lib。您需要安装解析器库吗?

Python bs4.FeatureNotFound:找不到具有您请求的功能的树生成器:html5lib。您需要安装解析器库吗?,python,html,python-3.x,parsing,beautifulsoup,Python,Html,Python 3.x,Parsing,Beautifulsoup,这个问题类似于。 我读过答案,但没有一个对我有用。 我正试图从中的蓝色框中获取信息 这是我写的: 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') s

这个问题类似于。 我读过答案,但没有一个对我有用。 我正试图从中的蓝色框中获取信息

这是我写的:

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”对象没有属性“prettify”。原因是它找不到“游戏标题正文”,因此变为非类型。当我删除soup=soup.find'div',class='game-header-body'行时,我可以看到除我感兴趣的div之外的所有html代码

我已经读到,也许改为“html5lib”解析器库更好。我是通过pip3安装html5lib安装的,我使用的是python3.4.3,但是仍然出现了前面提到的错误。我该怎么办?

元素游戏标题正文不在HTML源代码中,但稍后由javascript呈现。你需要像硒这样的东西来帮助你。它可以加载您选择的浏览器,包括一个无头浏览器(如果需要),然后为您执行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("----------------")

注意,有多个游戏标题正文div,因此这将显示所有这些div。

Hi,元素game header body在页面源代码中不存在,它是由javascript加载的。因此,您将需要selenium,它将加载javascript,然后您可以提取。非常感谢,它工作了!只有一件事:你能给我解释一下这句话吗:from selenium.webdriver.firefox.firefox\u binary导入FirefoxBinary?我试着删除它并删除webdriver.Firefox参数,结果似乎是一样的。有必要吗?为什么会这样呢?不同版本的selenium需要不同的设置,我知道这只是我使用过的一个,它仍然适用于我的版本。如果另一个适合你,那也很好。