lxml的使用(節點與xpath爬取數據)


lxml安裝

  lxml是python下功能很豐富的XML和HTML解析庫,性能非常的好,是對libxml3和libxlst的封裝。在Windows下載這個庫直接使用 pip install lxml 即可。CentOS下載可使用以下命令。

 yum install libxml3-devel libxslt-devel 

 pip install lxml

lxml構建HTM

  在lxml下,很大程度上運用了DOM樹的概念,他能夠結合XPath很方便的獲取到我們想要的數據。

   在lxml中,我們必須學會一些最基本的使用方法,首先是他提供的etree。

  下面代碼提供了使用etree構建HTML的基本方法

 1 '''
 2 @Description: lxml創建html頁面
 3 @Version: 1.0
 4 @Autor: Montoin Yan
 5 @Date: 2020-02-05 20:01:17
 6 @LastEditors  : Montoin Yan
 7 @LastEditTime : 2020-02-05 21:06:31
 8 '''
 9 from lxml import etree
10 
11 root = etree.Element('html') #創建一個父節點
12 body = etree.Element('body') #創建第二個節點
13 
14 root.append(body) #以root為父節點將body作為添加到root的字節點中
15 print(etree.tostring(root))
16 
17 div1 = etree.SubElement(body,'div') #設置div塊將其設置為body中的子節點
18 div2 = etree.SubElement(body,'div') #同上
19 
20 print(etree.tostring(root,pretty_print=True).decode()) #按照root作為父節點將所有內容漂亮的打印出來
21 
22 etree.HTML(text) #解析HTML文檔,並返回根節點

 

 lxml中etree模塊使用

  lxml還提供了兩個很有用的函數,即  

etree.HTML(text)  #解析HTML文檔,返回DOM根節點

anode.xpath("xpath絕對路徑")  #對節點使用xpath語法

  下面的例子使用lxml+xpath爬取豆瓣一周口碑榜

 1 '''
 2 @Description: lxml爬取豆瓣一周口碑榜
 3 @Version: 1.0
 4 @Autor: Montoin Yan
 5 @Date: 2020-02-05 21:16:02
 6 @LastEditors  : Montoin Yan
 7 @LastEditTime : 2020-02-05 21:44:28
 8 '''
 9 from lxml import etree
10 import requests
11 import random
12 
13 #設置多個請求頭,防止被反扒措施進行攔截
14 ua_list = [
15     "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
16     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36",
17     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362",
18     "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
19 ]
20 #隨機pick one
21 ua = random.choice(ua_list)
22 
23 url = "https://movie.douban.com/"
24 response = requests.request('GET',url,headers={
25     'User-agent':ua
26 })
27 
28 content = response.text
29 # print(content) #HTML內容
30 
31 #XPath  //div[@class='billboard-bd']//tr//a/text()
32 html = etree.HTML(content) #使用XPath解析上下文,返回DOM根節點
33 titles = html.xpath("//div[@class='billboard-bd']//tr//a/text()") #依照XPath要求獲取需要的文本
34 for i in titles:
35     print(i)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM