1. 程式人生 > >python爬蟲之lxml簡單學習使用方法

python爬蟲之lxml簡單學習使用方法

使用BeautifulSoup和lxml,可以解析程式碼並不規範的網頁,並補充程式碼方便解析。使用過BeatuifulSoup解析網頁,解析速度上並沒有lxml快,本人爬取過一個網站,用aiohttp+BeautifulSoup,協程一起爬20多個網頁,由於解析超時會中斷,改用lxml後,就沒有出現這個問題,爬取速度提升了數倍。

使用lxml步驟:

1,引入包:from lxml import etree

2,解析獲得的網頁:html = etree.HTML(要解析的網頁或文字)

3,使用etree匹配獲得要取得的內容:

例如:獲得 html中所有的li內容:

li = html.xpath('//li')

下面是一份完整程式碼:

html內容:

..

<li class="name"  id = "hahaha"> 哈哈哈<a href="'www.bai.com" id="a" ></a></li>

<li class="haha"></li>

..

python程式碼:

from lxml import etree

html = etree.HTML(html)

li = html.xpath('//li/@class')      #代表從根目錄尋找所有li的class屬性,輸出 ['name','haha']

print(html.xpath('//li[contains(@class,"name")]/text()') ) #從根目錄尋找class為name的li下的文字,輸出為哈哈哈

print(li.xpath('./a/@href'))  #從li節點開始尋找所有的a節點的href,輸出為www.bai.com

print(li[0].attrib) #輸出li[0]的屬性,輸出為{"class":"name","id":"haha"}

常用的符號如下,跟shell尋找目錄路徑規則相似:   

表示式  描述
nodename 選取此節點的所有子節點
/ 下一節點
//  從當前節點開始遞迴下降,此路徑運算子出現在模式開頭時,表示應從根節點遞迴下降。
. 選取當前節點
..  選取當前節點的父節點
@   選取屬性
@*  選取所有屬性
[]    應用篩選模式,可以用來篩選想要的內容