
- Beautiful Soup 教程
- Beautiful Soup - 首頁
- Beautiful Soup - 概述
- Beautiful Soup - 網頁抓取
- Beautiful Soup - 安裝
- Beautiful Soup - 解析頁面
- Beautiful Soup - 物件型別
- Beautiful Soup - 檢查資料來源
- Beautiful Soup - 抓取 HTML 內容
- Beautiful Soup - 透過標籤導航
- Beautiful Soup - 透過 ID 查詢元素
- Beautiful Soup - 透過 Class 查詢元素
- Beautiful Soup - 透過屬性查詢元素
- Beautiful Soup - 搜尋樹
- Beautiful Soup - 修改樹
- Beautiful Soup - 解析文件的一部分
- Beautiful Soup - 查詢元素的所有子元素
- Beautiful Soup - 使用 CSS 選擇器查詢元素
- Beautiful Soup - 查詢所有註釋
- Beautiful Soup - 從 HTML 中抓取列表
- Beautiful Soup - 從 HTML 中抓取段落
- BeautifulSoup - 從 HTML 中抓取連結
- Beautiful Soup - 獲取所有 HTML 標籤
- Beautiful Soup - 獲取標籤內的文字
- Beautiful Soup - 查詢所有標題
- Beautiful Soup - 提取標題標籤
- Beautiful Soup - 提取電子郵件 ID
- Beautiful Soup - 抓取巢狀標籤
- Beautiful Soup - 解析表格
- Beautiful Soup - 選擇第 n 個子元素
- Beautiful Soup - 透過標籤內的文字搜尋
- Beautiful Soup - 刪除 HTML 標籤
- Beautiful Soup - 刪除所有樣式
- Beautiful Soup - 刪除所有指令碼
- Beautiful Soup - 刪除空標籤
- Beautiful Soup - 刪除子元素
- Beautiful Soup - find 與 find_all 的區別
- Beautiful Soup - 指定解析器
- Beautiful Soup - 比較物件
- Beautiful Soup - 複製物件
- Beautiful Soup - 獲取標籤位置
- Beautiful Soup - 編碼
- Beautiful Soup - 輸出格式化
- Beautiful Soup - 美化輸出
- Beautiful Soup - NavigableString 類
- Beautiful Soup - 將物件轉換為字串
- Beautiful Soup - 將 HTML 轉換為文字
- Beautiful Soup - 解析 XML
- Beautiful Soup - 錯誤處理
- Beautiful Soup - 故障排除
- Beautiful Soup - 移植舊程式碼
- Beautiful Soup - 函式參考
- Beautiful Soup - contents 屬性
- Beautiful Soup - children 屬性
- Beautiful Soup - string 屬性
- Beautiful Soup - strings 屬性
- Beautiful Soup - stripped_strings 屬性
- Beautiful Soup - descendants 屬性
- Beautiful Soup - parent 屬性
- Beautiful Soup - parents 屬性
- Beautiful Soup - next_sibling 屬性
- Beautiful Soup - previous_sibling 屬性
- Beautiful Soup - next_siblings 屬性
- Beautiful Soup - previous_siblings 屬性
- Beautiful Soup - next_element 屬性
- Beautiful Soup - previous_element 屬性
- Beautiful Soup - next_elements 屬性
- Beautiful Soup - previous_elements 屬性
- Beautiful Soup - find 方法
- Beautiful Soup - find_all 方法
- Beautiful Soup - find_parents 方法
- Beautiful Soup - find_parent 方法
- Beautiful Soup - find_next_siblings 方法
- Beautiful Soup - find_next_sibling 方法
- Beautiful Soup - find_previous_siblings 方法
- Beautiful Soup - find_previous_sibling 方法
- Beautiful Soup - find_all_next 方法
- Beautiful Soup - find_next 方法
- Beautiful Soup - find_all_previous 方法
- Beautiful Soup - find_previous 方法
- Beautiful Soup - select 方法
- Beautiful Soup - append 方法
- Beautiful Soup - extend 方法
- Beautiful Soup - NavigableString 方法
- Beautiful Soup - new_tag 方法
- Beautiful Soup - insert 方法
- Beautiful Soup - insert_before 方法
- Beautiful Soup - insert_after 方法
- Beautiful Soup - clear 方法
- Beautiful Soup - extract 方法
- Beautiful Soup - decompose 方法
- Beautiful Soup - replace_with 方法
- Beautiful Soup - wrap 方法
- Beautiful Soup - unwrap 方法
- Beautiful Soup - smooth 方法
- Beautiful Soup - prettify 方法
- Beautiful Soup - encode 方法
- Beautiful Soup - decode 方法
- Beautiful Soup - get_text 方法
- Beautiful Soup - diagnose 方法
- Beautiful Soup 有用資源
- Beautiful Soup - 快速指南
- Beautiful Soup - 有用資源
- Beautiful Soup - 討論
Beautiful Soup - 指定解析器
一個 HTML 文件樹被解析成 BeautifulSoup 類的物件。此類的建構函式需要一個強制引數,即 HTML 字串或指向 html 檔案的檔案物件。建構函式還有其他可選引數,其中重要的是 features。
BeautifulSoup(markup, features)
這裡 markup 是一個 HTML 字串或檔案物件。features 引數指定要使用的解析器。它可以是特定的解析器,例如 "lxml"、"lxml-xml"、"html.parser" 或 "html5lib";或者是要使用的標記型別("html"、"html5"、"xml")。
如果未給出 features 引數,Beautiful Soup 會選擇已安裝的最佳 HTML 解析器。Beautiful Soup 將 lxml 的解析器評為最佳,然後是 html5lib 的解析器,最後是 Python 的內建解析器。
您可以指定以下內容之一 -
您要解析的標記型別。Beautiful Soup 當前支援 "html"、"xml" 和 "html5"。
要使用的解析器庫的名稱。當前支援的選項是 "lxml"、"html5lib" 和 "html.parser"(Python 的內建 HTML 解析器)。
要安裝 lxml 或 html5lib 解析器,請使用以下命令 -
pip3 install lxml pip3 install html5lib
這些解析器各有優缺點,如下所示 -
解析器:Python 的 html.parser
用法 - BeautifulSoup(markup, "html.parser")
優點
- 內建
- 速度適中
- 寬容(自 Python 3.2 起)
缺點
- 速度不如 lxml 快,寬容度不如 html5lib 高。
解析器:lxml 的 HTML 解析器
用法 - BeautifulSoup(markup, "lxml")
優點
- 非常快
- 寬容
缺點
- 外部 C 依賴
解析器:lxml 的 XML 解析器
用法 - BeautifulSoup(markup, "lxml-xml")
或 BeautifulSoup(markup, "xml")
優點
- 非常快
- 唯一當前支援的 XML 解析器
缺點
- 外部 C 依賴
解析器:html5lib
用法 - BeautifulSoup(markup, "html5lib")
優點
- 極其寬容
- 以與 Web 瀏覽器相同的方式解析頁面
- 建立有效的 HTML5
缺點
- 非常慢
- 外部 Python 依賴
不同的解析器會從同一文件建立不同的解析樹。HTML 解析器和 XML 解析器之間的差異最大。這是一個簡短的文件,以 HTML 格式解析 -
示例
from bs4 import BeautifulSoup soup = BeautifulSoup("<a><b /></a>", "html.parser") print (soup)
輸出
<a><b></b></a>
空的 <b /> 標籤不是有效的 HTML。因此,解析器將其轉換為 <b></b> 標籤對。
現在以 XML 格式解析同一文件。請注意,空 <b /> 標籤保持不變,並且該文件被賦予 XML 宣告而不是放入 <html> 標籤中。
示例
from bs4 import BeautifulSoup soup = BeautifulSoup("<a><b /></a>", "xml") print (soup)
輸出
<?xml version="1.0" encoding="utf-8"?> <a><b/></a>
對於格式良好的 HTML 文件,所有 HTML 解析器都會產生類似的解析樹,儘管一個解析器會比另一個解析器快。
但是,如果 HTML 文件不完美,則不同型別的解析器將產生不同的結果。請檢視當 "<a></p>" 使用不同的解析器解析時結果有何不同 -
lxml 解析器
示例
from bs4 import BeautifulSoup soup = BeautifulSoup("<a></p>", "lxml") print (soup)
輸出
<html><body><a></a></body></html>
請注意,懸空的 </p> 標籤被簡單地忽略了。
html5lib 解析器
示例
from bs4 import BeautifulSoup soup = BeautifulSoup("<a></p>", "html5lib") print (soup)
輸出
<html><head></head><body><a><p></p></a></body></html>
html5lib 將其與一個起始 <p> 標籤配對。此解析器還向文件添加了一個空的 <head> 標籤。
內建 html 解析器
示例
Built in from bs4 import BeautifulSoup soup = BeautifulSoup("<a></p>", "html.parser") print (soup)
輸出
<a></a>
此解析器也忽略了結束 </p> 標籤。但此解析器沒有嘗試透過新增 <body> 標籤來建立格式良好的 HTML 文件,甚至沒有費心新增 <html> 標籤。
html5lib 解析器使用 HTML5 標準的一部分的技術,因此它對成為“正確”方式的說法最有依據。