美丽的汤和桌子刮 - 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 解析器的主要内容,如果未能解决你的问题,请参考以下文章