首頁技術(shù)文章正文

Python爬蟲支持的網(wǎng)頁解析技術(shù)有哪些?

更新時(shí)間:2021-04-12 來源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif


了解了網(wǎng)頁的數(shù)據(jù)和結(jié)構(gòu)以后,我們可以借助網(wǎng)頁解析器(用于解析網(wǎng)頁的工具)從網(wǎng)頁中解析和提取出有價(jià)值的數(shù)據(jù),或者是新的URL列表,過程如圖1所示。為此,Python支持一些解析網(wǎng)頁的技術(shù),分別為正則表達(dá)式、XPath、Beautiful Soup和JSONPath,其中:

針對(duì)文本的解析,有正則表達(dá)式;

針對(duì)HTML/XML的解析,有XPath、Beautiful Soup、正則表達(dá)式;

針對(duì)JSON的解析,有JSONPath。


數(shù)據(jù)解析技術(shù)

圖1 解析網(wǎng)頁的示意圖


那么,這幾種技術(shù)有什么區(qū)別呢?

正則表達(dá)式基于文本的特征來匹配或查找指定的數(shù)據(jù),它可以處理任何格式的字符串文檔,類似于模糊匹配的效果。

XPath和Beautiful Soup基于HTML/XML文檔的層次結(jié)構(gòu)來確定到達(dá)指定節(jié)點(diǎn)的路徑,所以它們更適合處理層級(jí)比較明顯的數(shù)據(jù)。

JSONPath專門用于JSON文檔的數(shù)據(jù)解析。

針對(duì)不同的網(wǎng)頁解析技術(shù),Python分別提供了不同的模塊或者庫來支持。其中,re模塊支持正則表達(dá)式語法的使用,lxml庫支持XPath語法的使用,json模塊支持JSONPath語法的使用。此外,Beautiful Soup本身就是一個(gè)Python庫,官方推薦使用beautifulsoup4進(jìn)行開發(fā)。

正則表達(dá)式、XPath和Beautiful Soup都能實(shí)現(xiàn)網(wǎng)頁的解析,那么實(shí)際開發(fā)中應(yīng)該如何選擇呢?接下來,通過一張表來比較一下re、lxml和beautifulsoup4的性能,如表1所示。

表1 解析工具的性能比較

抓取工具速度使用難度安裝難度
re                                     最快                  困難                      無(內(nèi)置)                  
lxml簡單一般
beautifulsoup4最簡單簡單
lxml庫是用C語言編寫的,beautifulsoup4庫是用Python編寫的,所以性能會(huì)差一些。但是,beautifulsoup4的API非常人性化,用起來比較簡單,而lxml使用的XPath語法寫起來比較麻煩,所以開發(fā)效率不如beautifulsoup4。


此外,lxml只能局部遍歷樹結(jié)構(gòu),而beautifulsoup4是載入整個(gè)文檔,并轉(zhuǎn)換成整個(gè)樹結(jié)構(gòu)。因此,beautifulsoup4需要花費(fèi)更多的時(shí)間和內(nèi)存,性能會(huì)稍低于lxml。

通過表1中對(duì)三種技術(shù)的比較,大家在實(shí)際開發(fā)中可根據(jù)具體情況選擇適合自己的技術(shù)。




猜你喜歡:

Python爬蟲難學(xué)嗎?學(xué)會(huì)需要多久?

網(wǎng)絡(luò)爬蟲獲取數(shù)據(jù)的5種方式【Python爬蟲】

多線程爬蟲是什么?多線程爬蟲流程分析    

黑馬程序員Python培訓(xùn)

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!