004. Python 解析 HTML 文檔庫:PyQuery
在 Python 中解析 HTML 和 XML 文檔有很多庫可供使用,包括但不限于:
Beautiful Soup: 一個解析庫,用來從 HTML 和 XML 文檔中提取數(shù)據(jù)。它使用簡單,并且能夠以流暢的方式處理復(fù)雜的文檔結(jié)構(gòu)。
lxml: 一個高性能的解析庫,支持 XPath 和多種不同的解析模式。它可以從 HTML 和 XML 文檔中提取數(shù)據(jù),并且可以用來構(gòu)建新的文檔。
PyQuery: 一個輕量級的庫,使用方式類似于 jQuery,是對 lxml 的進(jìn)一步封裝。它可以用來從 HTML 和 XML 文檔中提取數(shù)據(jù),并且可以用來構(gòu)建新的文檔。
html5lib: 一個慢速但容錯性強(qiáng)的庫,可以解析有誤或不完整的 HTML 文檔。
對于選擇哪個庫,要考慮到你的需求和對性能的要求。如果需要快速地處理大型文檔,那么 lxml 和 Beautiful Soup 可能是最好的選擇。如果你需要一個輕量級的庫,或者希望使用類似于 jQuery 的 API 來提取數(shù)據(jù),那么 PyQuery 可能是最合適的選擇。如果你需要處理有誤或不完整的 HTML 文檔,那么 html5lib 可能是最合適的選擇。
本文主要介紹?PyQuery ,并簡要分析這個?jquery-like library 在處理 HTML 的 API 與?jQuery 相比有哪些改動。
開始使用
要使用 PyQuery,首先需要安裝它:
然后可以使用 PyQuery 解析 HTML 或 XML 文檔,可以從字符串(Bytes)、文件或 url 加載,例如:
選取節(jié)點(diǎn)
與?jQuery 類似,PyQuery 使用 CSS 選擇器選取元素(Element)或節(jié)點(diǎn)(Node)。
也可使用較復(fù)雜的選擇器:
當(dāng)獲取到的元素不止一個時,可以遍歷獲?。?/p>
注意,如果直接調(diào)用方法獲取文本內(nèi)容或其他屬性,只能獲取第一個元素的對應(yīng)屬性。
讀取屬性
當(dāng)定位到了想要的節(jié)點(diǎn),可以獲取該節(jié)點(diǎn)的屬性(Attributes):
也可以設(shè)置或獲取 CSS 屬性('-' 需要改成 '_'):
自然少不了最重要的 text 與 html 這兩種方法:
注意,以上兩種方法獲取的是元素子節(jié)點(diǎn)內(nèi)容,相當(dāng)于原生 js 的 innerText 與 innerHTML,要獲取完整 html 內(nèi)容,可以使用另一方法。
總結(jié)
PyQuery?是一個基于jquery風(fēng)格的,用于解析和操作 HTML 和 XML 文檔的 Python 庫,但并不完全兼容 jQuery 。它并不支持所有 jQuery 的特性,并且語法略有不同。由于 PyQuery 一般用于爬蟲等場景,復(fù)刻全部?jQuery 功能既不現(xiàn)實(shí)也無必要。
在?jQuery 江河日下的今天,其在前端領(lǐng)域操作 DOM 的機(jī)會已經(jīng)大大減少,大有成為時代的眼淚之勢。而在 Python 中能看到這樣一個類?jQuery 的好用解析庫,淚目。也許隨著前后端分離的大趨勢的到來,動態(tài)網(wǎng)頁逐漸占據(jù)主流,日后像?PyQuery 這樣的 HTML 解析庫終有一天也會被人忘卻。
最后,感謝?PyQuery?作者大大,并引用他的一句話結(jié)尾:
I just liked the jquery API and I missed it in python so I told myself “Hey let’s make jquery in python”. This is the result.
延伸閱讀
PyQuery 文檔:https://pyquery.readthedocs.io/en/latest/index.html
jQuery 官網(wǎng):https://jquery.com/
PyQuery詳解:https://zhuanlan.zhihu.com/p/55532845