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

LaG*_*lle 6 python lxml beautifulsoup html-parsing web-scraping

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

<table class="facts_label" id="facts_table">...</table>
Run Code Online (Sandbox Code Playgroud)

我想知道为什么代码波纹管与作品"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
Run Code Online (Sandbox Code Playgroud)

小智 16

简短的回答。

如果您已经安装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")

  • 优点:极其宽松,以与 Web 浏览器相同的方式解析页面,创建有效的 HTML5

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


ale*_*cxe 12

BeautifulSoup文档中有一个特殊段落,称为解析器之间的差异,它声明:

Beautiful Soup为许多不同的解析器提供相同的接口,但每个解析器都是不同的.不同的解析器将从同一文档创建不同的解析树.最大的区别在于HTML解析器和XML解析器之间.

在格式不正确的HTML文档中,差异变得清晰.

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

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