美丽的汤和桌子刮 - lxml 与 html 解析器

Posted

技术标签:

【中文标题】美丽的汤和桌子刮 - lxml 与 html 解析器【英文标题】:Beautiful Soup and Table Scraping - lxml vs html parser 【发布时间】:2014-11-01 02:12:15 【问题描述】:

我正在尝试使用 BeautifulSoup 从网页中提取表格的 html 代码。

<table class="facts_label" id="facts_table">...</table>

我想知道为什么下面的代码可以与"html.parser" 一起使用,如果我将"html.parser" 更改为"lxml",则会打印回none

#! /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

【问题讨论】:

【参考方案1】:

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

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

在非格式良好的 HTML 文档中,差异变得很明显。

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

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

【讨论】:

【参考方案2】:

简答。

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

【讨论】:

以上是关于美丽的汤和桌子刮 - lxml 与 html 解析器的主要内容,如果未能解决你的问题,请参考以下文章

美丽的汤和uTidy

美丽的汤和正则表达式

美丽的汤和提取价值

将 lxml 与美丽的汤一起使用

在python中使用漂亮的汤和硒来解析html

美丽的汤在源文件中找到标记的位置?