更新時間:2021-04-12 來源:黑馬程序員 瀏覽量:
了解了網(wǎng)頁的數(shù)據(jù)和結(jié)構(gòu)以后,我們可以借助網(wǎng)頁解析器(用于解析網(wǎng)頁的工具)從網(wǎng)頁中解析和提取出有價值的數(shù)據(jù),或者是新的URL列表,過程如圖1所示。為此,Python支持一些解析網(wǎng)頁的技術,分別為正則表達式、XPath、Beautiful Soup和JSONPath,其中:
針對文本的解析,有正則表達式;
針對HTML/XML的解析,有XPath、Beautiful Soup、正則表達式;
針對JSON的解析,有JSONPath。
圖1 解析網(wǎng)頁的示意圖
那么,這幾種技術有什么區(qū)別呢?
正則表達式基于文本的特征來匹配或查找指定的數(shù)據(jù),它可以處理任何格式的字符串文檔,類似于模糊匹配的效果。
XPath和Beautiful Soup基于HTML/XML文檔的層次結(jié)構(gòu)來確定到達指定節(jié)點的路徑,所以它們更適合處理層級比較明顯的數(shù)據(jù)。
JSONPath專門用于JSON文檔的數(shù)據(jù)解析。
針對不同的網(wǎng)頁解析技術,Python分別提供了不同的模塊或者庫來支持。其中,re模塊支持正則表達式語法的使用,lxml庫支持XPath語法的使用,json模塊支持JSONPath語法的使用。此外,Beautiful Soup本身就是一個Python庫,官方推薦使用beautifulsoup4進行開發(fā)。
正則表達式、XPath和Beautiful Soup都能實現(xiàn)網(wǎng)頁的解析,那么實際開發(fā)中應該如何選擇呢?接下來,通過一張表來比較一下re、lxml和beautifulsoup4的性能,如表1所示。
表1 解析工具的性能比較
抓取工具 | 速度 | 使用難度 | 安裝難度 |
---|---|---|---|
re | 最快 | 困難 | 無(內(nèi)置) |
lxml | 快 | 簡單 | 一般 |
beautifulsoup4 | 慢 | 最簡單 | 簡單 |
此外,lxml只能局部遍歷樹結(jié)構(gòu),而beautifulsoup4是載入整個文檔,并轉(zhuǎn)換成整個樹結(jié)構(gòu)。因此,beautifulsoup4需要花費更多的時間和內(nèi)存,性能會稍低于lxml。
通過表1中對三種技術的比較,大家在實際開發(fā)中可根據(jù)具體情況選擇適合自己的技術。
猜你喜歡: