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