Beautiful Soup - 故障排除



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

Beautiful Soup 中的 diagnose() 方法是用于隔离常见问题的诊断套件。如果您在理解 Beautiful Soup 对文档的操作方面遇到困难,请将文档作为参数传递给 diagnose() 函数。一个报告将向您展示不同的解析器如何处理文档,并告诉您是否缺少解析器。

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

示例

diagnose(markup)

输出

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: malformed start tag 和 HTMLParser.HTMLParseError: bad end tag 均由 Python 的内置 HTML 解析器库生成,解决方法是安装 lxml 或 html5lib。

如果您遇到 SyntaxError: Invalid syntax(在 ROOT_TAG_NAME = '[document]' 行),则这是由于在 Python 3 下运行旧版 Python 2 的 Beautiful Soup,而没有转换代码。

带有消息 No module named HTMLParser 的 ImportError 是因为在 Python 3 下使用了旧版 Python 2 的 Beautiful Soup。

而 ImportError: No module named html.parser - 是由于在 Python 2 下运行 Python 3 版本的 Beautiful Soup 引起的。

如果您收到 ImportError: No module named BeautifulSoup - 通常情况下,这是因为在没有安装 BS3 的系统上运行 Beautiful Soup 3 代码。或者,在编写 Beautiful Soup 4 代码时不知道包名称已更改为 bs4。

最后,ImportError: No module named bs4 - 是因为您在没有安装 BS4 的系统上尝试使用 Beautiful Soup 4 代码。

广告

© . All rights reserved.