找出 BeautifulSoup4 使用的是哪个解析器?
Find out which parser BeautifulSoup4 is using?
我使用 beautifulsoup4 编写了一个脚本,该脚本在一台机器上有效,但在另一台机器上无效。原因是在另一台机器上,BeautifulSoup() 构造函数自动将 <br>
转换为 <br/>
而这不是我机器上的行为。信不信由你,这对我的剧本很重要。
我认为这两台机器可能使用了 2 个不同的底层 HTML 解析器。我怎样才能知道他们使用的是什么解析器?我知道我可以指定一个解析器库供 BeautifulSoup 使用,但首先我需要知道要统一到哪个库。
两台机器运行python2.7.6
我认为这没有记录,但如果您查看 the source,根据您的 builder
and/or [=] 选择的 class 的实例11=] 个参数存储在 builder
属性中。
所以,您可能需要 type(soup.builder).__name__
,这会给您以下之一:
HTMLParserTreeBuilder
:使用html.parser
LXMLTreeBuilder
:使用lxml
LXMLTreeBuilderForXML
:使用xml
HTML5TreeBuilder
:使用html5lib
(当然,这是假设您没有围绕其他解析器编写自己的自定义构建器,但如果您这样做了,希望您会知道。:)
我使用 beautifulsoup4 编写了一个脚本,该脚本在一台机器上有效,但在另一台机器上无效。原因是在另一台机器上,BeautifulSoup() 构造函数自动将 <br>
转换为 <br/>
而这不是我机器上的行为。信不信由你,这对我的剧本很重要。
我认为这两台机器可能使用了 2 个不同的底层 HTML 解析器。我怎样才能知道他们使用的是什么解析器?我知道我可以指定一个解析器库供 BeautifulSoup 使用,但首先我需要知道要统一到哪个库。
两台机器运行python2.7.6
我认为这没有记录,但如果您查看 the source,根据您的 builder
and/or [=] 选择的 class 的实例11=] 个参数存储在 builder
属性中。
所以,您可能需要 type(soup.builder).__name__
,这会给您以下之一:
HTMLParserTreeBuilder
:使用html.parser
LXMLTreeBuilder
:使用lxml
LXMLTreeBuilderForXML
:使用xml
HTML5TreeBuilder
:使用html5lib
(当然,这是假设您没有围绕其他解析器编写自己的自定义构建器,但如果您这样做了,希望您会知道。:)