一、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...