我正在尝试使用BeautifulSoup从网页中提取表格的HTML代码。
<table class="facts_label" id="facts_table">...</table>
我想知道为什么以下代码与"html.parser"
一起使用,并且如果我将none
更改为"html.parser"
,则会打印回"lxml"
。
#! /usr/bin/python
from bs4 import BeautifulSoup
from urllib import urlopen
webpage = urlopen('http://www.thewebpage.com')
soup=BeautifulSoup(webpage, "html.parser")
table = soup.find('table', {'class' : 'facts_label'})
print table
BeautifulSoup
文档中有一个特殊的段落称为Differences between parsers,它指出:
[Beautiful Soup呈现相同的界面,但存在许多不同的解析器,但是每个解析器都是不同的。不同的解析器将创建同一文档中的不同解析树。最大的不同在HTML解析器和XML解析器之间。
在格式不正确的HTML文档中,区别变得明显。
道德是,您应该使用在特定情况下有效的解析器。
还要注意,您应该始终明确指定要使用的解析器。这将帮助您避免在不同的计算机或虚拟环境上运行代码时出现意外。
简短回答。
如果已经安装lxml
,请使用它。
html.parser-BeautifulSoup(markup, "html.parser")
优点:包括电池,不错的速度,宽大(自Python2.7.3和3.2。)
缺点:不太宽容(在Python 2.7.3或3.2.2之前)
lxml-BeautifulSoup(markup, "lxml")
优点:非常快,宽大
缺点:外部C依赖性
html5lib-BeautifulSoup(markup, "html5lib")
优点:非常宽大,以网页浏览器的方式解析页面,创建有效的HTML5
缺点:非常慢,外部Python依赖项