10 python爬蟲之lxml庫

2022-09-13 06:54:08 字數 4601 閱讀 3003

lxml 是一種使用 python 編寫的庫,可以迅速、靈活地處理 xml ,支援 xpath (xml path language)

lxml python 官方文件

學習目的

利用上節課學習的xpath語法,來快速的定位特定元素以及節點資訊,目的是 提取出 html、xml 目標資料

如何安裝

sudo apt-get install libxml2-dev libxslt1-dev python-dev

sudo apt-get install zlib1g-dev

sudo apt-get install libevent-dev

sudo pip install lxml

利用 pip 安裝即可

初步使用

首先我們利用lxml來解析 html **,先來乙個小例子來感受一下它的基本用法。

使用 lxml 的 etree 庫,然後利用 etree.html 初始化,然後我們將其列印出來。

from lxml import etree

text ='''

'''#把字串解析為html文件

html = etree.html(text)

#將元素序列化為其xml樹的字串表示形式

result = etree.tostring(html)

print (result)

所以輸出結果是這樣的

不僅補全了 li 標籤,還新增了 body,html 標籤。

**1. 獲取所有的 **標籤

print type(html)

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

print (result)

print (len(result))

print (type(result))

print (type(result[0]))

執行結果

[, , , , ]

5

可見,每個元素都是 element 型別;是乙個個的標籤元素,類似現在的例項

element型別代表的就是

第一項

[注意]

element型別是一種靈活的容器物件,用於在記憶體中儲存結構化資料。

每個element物件都具有以下屬性:

1. tag:string物件,標籤,用於標識該元素表示哪種資料(即元素型別)。

2. attrib:dictionary物件,表示附有的屬性。

3. text:string物件,表示element的內容。

4. tail:string物件,表示element閉合之後的尾跡。

示例

texttail1     2        3         4
result[0].tag     #li
2. 獲取標籤的所有 class

html.xpath('//li/@class')
執行結果

['item-0', 'item-1', 'item-inactive', 'item-1', 'item-0']
3.獲取標籤下屬性 href 為 link1.html 的標籤

html.xpath('//li/a[@href="link1.html"]')
執行結果

4.獲取標籤下的所有** 標籤**

注意這麼寫是不對的

html.xpath('//li/span')
因為 / 是用來獲取子元素的,而並不是的子元素,所以,要用雙斜槓

html.xpath('//li//span')
執行結果

5. 獲取標籤下的所有 class,不包括

html.xpath('//li/a//@class')
執行結果

['blod']
**6. 獲取最後乙個 **的 href

html.xpath('//li[last()]/a/@href')
執行結果

['link5.html']
7. 獲取 class 為 bold 的標籤名

result = html.xpath('//*[@class="bold"]')print result[0].tag
執行結果

span
通過以上例項的練習,相信大家對 xpath 的基本用法有了基本的了解

實戰專案

豆瓣電影排行榜

# 豆瓣排行榜

# 請求頭資訊

req = urllib.request.request(url,headers=herders)

# 設定請求頭

response=urllib.request.urlopen(req)

# response 是返回響應的資料

htmltext=response.read()

# 讀取響應資料

# 把字串解析為html文件

html = etree.html(htmltext)

result = html.xpath('//div[@class="pl2"]/a')

# 解析到所有的標題

file = open('data.txt','a+',encoding='utf-8')

# 開啟乙個文字檔案

for line in result:

file.write(line.xpath('string(.)').replace('\n','').replace(' ','')+'\n')

# 遍歷解析到的結果

# 獲取裡面的文字.移除換行.替換空格+換行

file.close()

data.txt

從**中拯救我/魔鬼對決(臺)/請救我於**

神棄之地/惡魔每時每刻

監視資本主義:智慧型陷阱/社交困境/智慧型社會:進退兩難(臺)

我想結束這一切/i』mthinkingofendingthings(風格化標題)

鳴鳥不飛:烏雲密布/saezurutoriwahabatakanai:thecloudsgather

樹上有個好地方/thehomeinthetree

辣手保姆2:女王蜂/撒旦保姆:血腥女王/thebabysitter2

凍結的希望/雪藏希望:待日重生/hopefrozen:aquesttolivetwice

鐵雨2:首腦峰會/鐵雨2:首腦會談/鋼鐵雨2:核戰危機(港)

"""

單詞表parse 解析

request 請求

headers 請求頭

result 結果

file 檔案

encoding 編碼

write 寫

open 開啟

string 文字

replace 替換

"""

(1)練習一下lxml、etree、xpath的整個的操作

(2)試試上節課xpath的語法以及html,自己動手實踐

10 python爬蟲之lxml庫

lxml 是一種使用 python 編寫的庫,可以迅速 靈活地處理 xml 支援 xpath xml path language lxml python 官方文件 學習目的 利用上節課學習的xpath語法,來快速的定位特定元素以及節點資訊,目的是 提取出 html xml 目標資料 如何安裝 sud...

python爬蟲網頁解析之lxml模組

windows系統下的安裝 方法一 pip3 install lxml pip3 install lxml 4.2.1 cp36 cp36m win amd64.whl 檔案所在的路徑 linux下安裝 方法一 pip3 install lxml 方法二 yum install y epel rel...

10 python 條件控制 if

1.概述 條件語句是通過一條或多條語句的執行結果 true或者false 來決定執行的 塊。條件語句的執行過程圖 2.條件控制語句語法 python中使用 if語句實現條件控制 語法 if 判定條件 執行語句1elif 判定條件 執行語句2elif 判定語句 執行語句3 else 執行語句x注意的點...