漂亮的汤和桌子刮板-lxml与html解析器

问题描述 投票:9回答:2

我正在尝试使用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
python web-scraping html-parsing beautifulsoup lxml
2个回答
17
投票

BeautifulSoup文档中有一个特殊的段落称为Differences between parsers,它指出:

[Beautiful Soup呈现相同的界面,但存在许多不同的解析器,但是每个解析器都是不同的。不同的解析器将创建同一文档中的不同解析树。最大的不同在HTML解析器和XML解析器之间。

在格式不正确的HTML文档中,区别变得明显。

道德是,您应该使用在特定情况下有效的解析器。

还要注意,您应该始终明确指定要使用的解析器。这将帮助您避免在不同的计算机或虚拟环境上运行代码时出现意外。


2
投票

简短回答。

如果已经安装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依赖项

© www.soinside.com 2019 - 2024. All rights reserved.