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.