美丽的汤和表刮 - lxml vs html解析器

时间:2014-09-07 20:23:28

标签: python web-scraping html-parsing beautifulsoup lxml

我正在尝试使用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

2 个答案:

答案 0 :(得分:13)

简短答案。

如果您已经安装了lxml,请使用它。


html.parser -BeautifulSoup(markup, "html.parser")

  • 优点:包括电池,不错的速度,宽大(自Python) 2.7.3和3.2。)

  • 缺点:不太宽大(在Python 2.7.3或3.2.2之前)

lxml -BeautifulSoup(markup, "lxml")

  • 优点:非常快,宽大

  • 缺点:外部C依赖

html5lib -BeautifulSoup(markup, "html5lib")

  • 优点:非常宽大,以网页浏览器的方式解析页面,创建有效的HTML5

  • 缺点:非常慢,外部Python依赖

答案 1 :(得分:10)

BeautifulSoup文档中有一个名为Differences between parsers的特殊段落,它声明:

  

Beautiful Soup为许多不同的界面提供相同的界面   解析器,但每个解析器都不同。不同的解析器将创建   来自同一文档的不同解析树。最大的不同   在HTML解析器和XML解析器之间。

在格式不正确的HTML文档中,差异很明显。

道德只是你应该使用适合你特定情况的解析器。

另请注意,您应始终明确指定您使用的解析器。这可以帮助您避免在不同计算机或虚拟环境中运行代码时出现意外情况。