Beautiful Soup 简明教程

Beautiful Soup - Trouble Shooting

如果你在尝试解析 HTML/XML 文档时遇到问题,则更有可能是因为使用的解析器正在解释文档。为了帮助你找到并纠正问题,Beautiful Soup API 提供了一个诊断程序 diagnose()。

Beautiful Soup 中的 diagnose() 方法是一个诊断套件,用于隔离常见问题。如果你难以理解 Beautiful Soup 对文档执行了哪些操作,请将文档作为参数传递给 diagnose() 函数。一份报告显示了不同解析器如何处理文档,并告诉你是否缺少解析器。

diagnose() 方法在 bs4.diagnose 模块中定义。其输出以如下消息开头 −

Example

diagnose(markup)

Output

Diagnostic running on Beautiful Soup 4.12.2
Python version 3.11.2 (tags/v3.11.2:878ead1, Feb  7 2023, 16:38:35) [MSC v.1934 64 bit (AMD64)]
Found lxml version 4.9.2.0
Found html5lib version 1.1
Trying to parse your markup with html.parser
Here's what html.parser did with the markup:

如果没有找到这些解析器中的任何一个,还会出现一条相应的消息。

I noticed that html5lib is not installed. Installing it may help.

如果馈送到 diagnose() 方法的 HTML 文档形成正确,则任何解析器解析的树都将相同。但是,如果它形成不正确,那么不同的解析器会进行不同的解释。如果你没有得到你预期的树,则更改解析器可能会很有帮助。

有时,你可能为 XML 文档选择了 HTML 解析器。HTML 解析器在不正确地解析文档时会添加所有 HTML 标记。查看输出,你将意识到错误,并可在纠正中提供帮助。

如果 Beautiful Soup 发出 HTMLParser.HTMLParseError,请尝试更改解析器。

解析错误 HTMLParser.HTMLParseError: 格式错误的开始标记和 HTMLParser.HTMLParseError: 错误的结束标记均由 Python 的内置 HTML 解析器库生成,解决方案是安装 lxml 或 html5lib。

如果你遇到 SyntaxError: 语法无效(在行 ROOT_TAG_NAME = '[document]' 中),这是由于在 Python 3 下运行 Beautiful Soup 的旧 Python 2 版本,而没有转换代码。

ImportError 出现消息“No module named HTMLParser”是因为在 Python 3 中使用了旧的 Python 2 版 BeautifulSoup。

同时,ImportError:No module named html.parser - 是在 Python 2 中运行 Python 3 版本的 BeautifulSoup 导致的。

如果您收到 ImportError:No module named BeautifulSoup - 是因为在尚未安装 BS3 的系统上运 Beautiful Soup 3 代码。或者,不知道包名称已更改为 bs4,编写了 Beautiful Soup 4 代码。

最后,ImportError:No module named bs4 - 也可能是因为尝试在尚未安装 BS4 的系统上运行 Beautiful Soup 4 代码。