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內容如下:

<html>
<head></head>
<title>***</title>
<body>
...
<li class="name"  id = "hahaha"> 哈哈哈<a href="'www.bai.com" id="a" ></a></li>
<li class="haha"></li>
...
</body>
</html>

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 選取此節點的所有子節點
/ 下一節點
//  從當前節點開始遞歸下降,此路徑運算符出現在模式開頭時,表示應從根節點遞歸下降。
. 選取當前節點
..  選取當前節點的父節點
@   選取屬性
@*  選取所有屬性
[]    應用篩選模式,可以用來篩選想要的內容


   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章