爬蟲訓練(五) Lxml庫與Xpath語法

2021-10-05 11:10:34 字數 2800 閱讀 9391

一、lxml庫

lxml庫為xml解析庫,但也很好的支援了html文件的解析功能。lxml庫很實用的功能就是自動修正html**。

二、xpath語法

xpath是一門在xml文件中查詢資訊的語言,對html文件也有很好的支援。

1、節點關係

節點名性質父節點

每個元素及屬性都有乙個節點

子節點元素節點可能有0個、乙個或多個子節點

同胞節點

同胞節點擁有相同的父節點

先輩節點

先輩節點指某節點的父、父的父節點等

後代節點

後代節點指某個節點的子節點,子節點的子節點等

2、節點擊擇

節點擊擇表示式

描述例項

nodename

選取此節點的所有子節點

user_database:選取元素user_database的所有子節點

/從根節點擊取

/user_database:選取根元素user_database。(注釋:假如路徑起始於正斜槓(/),則此路徑始終代表到某元素的絕對路徑)。user_database/user:選取屬於user_database的子元素的所有user元素。

//從匹配選擇的當前節點擊擇文件中的節點,而不考慮它們的位置

//user:選取所有user子元素,而不管它們在文件中的位置。user_database//user:選取屬於user_database元素的後代的所有user元素,而不管它們位於user_database之下的什麼位置。

.選取當前節點

-----

…選取當前節點的父節點

-----

@選取屬性

//@attribute:選取名為attribute的所有屬性

謂語路徑表示式

結果/user_database/user[1]

選取屬於user_database子元素的第乙個user元素

//li[@attribute]

選取所有擁有名為attribute屬性的li元素

//li[@attribute=『red』]

選取所有li元素,且這些元素擁有值為red的attribute屬性

三、爬取豆瓣圖書top250

# coding=utf-8

import csv

from lxml import etree

import requests

fp=open

('h:/訓練/爬蟲練習/douban.csv'

,'wt'

,newline=

'',encoding=

'utf-8'

)writer=csv.writer(fp)

writer.writerow(

('name'

,'url'

,'author'

,'publisher'

,'date'

,'price'

,'rate'

,'comment'))

urls=

[''.format

(str

(i))

for i in

range(0

,250,25

)]headers =

for url in urls:

html=requests.get(url,headers=headers)

selector=etree.html(html.text)

infos=selector.xpath(

'//tr[@class="item"]'

)for info in infos:

name=info.xpath(

'td/div/a/@title')[

0]url=info.xpath(

'td/div/a/@href')[

0]book_infos=info.xpath(

'td/p/text()')[

0]author=book_infos.split(

'/')[0

] publisher=book_infos.split(

'/')[-

3]date=book_infos.split(

'/')[-

2]price=book_infos.split(

'/')[-

1]rate=info.xpath(

'td/div/span[2]/text()')[

0]comments=info.xpath(

'td/p/span/text()'

) comment=comments[0]

iflen

(comments)!=0

else

'空' writer.writerow(

(name,url,author,publisher,date,price,rate,comment)

)fp.close(

)

這裡碰到的第一類錯誤是編碼位置後的索引符號造成的,因為當內容為空時,使用索引符無法輸出結果,具體解釋可以參考下文:indexerror: list index out of range的錯誤原因。

第二個錯誤就是編碼問題,這裡在開頭加了一段**,具體參考:解決python**編碼問題 syntaxerror: non-utf-8 code starting with 『\xc1』。

第二個要提醒的就是查詢編碼位置,這裡通過《檢查》網頁就可以找到具體位置,相比bs和re,編碼尋找方法有些不同,需要留意和學習。

python爬蟲 三大庫之lxml庫

lxml庫是基於libxml2的xml解析庫的python庫,該模組使用c語言編寫,解析速度比beautifulsoup更快。lxml庫使用xpath語法解析定位網頁資料。windows系統下,在cmd命令提示框中,輸入如下命令 pip install lxml2.1 修正html lxml為xml...

Python爬蟲Xpath和lxml類庫系列之九

xpath xml path language 是一門在 xml 文件中查詢資訊的語言,可用來在 xml 文件中對元素和屬性進行遍歷。謂語用來查詢某個特定的節點或者包含某個指定的值的節點,被嵌在方括號中。xpath 萬用字元可用來選取未知的 xml 元素。通過在路徑表示式中使用 運算子,您可以選取若...

10 python爬蟲之lxml庫

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