Python 爬蟲 XPATH使用總結

2021-10-24 15:09:21 字數 4428 閱讀 9672

# xpath的常用規則:

#nodename:選取此節點的所有子節點

#/:從當前節點擊取直接子節點

#//:從當前節點擊取子孫節點

#.:選取當前節點

#..:選取當前節點的父節點

#@:選取屬性

#匹配規則://[@lang='eng']

# from lxml import etree

# text='''

# #

# # '''

# html=etree.html(text)

# result=etree.tostring(html)

# print(result.decode('utf-8'))

#結果:li節點標籤自動補全,還自動新增了body、html節點

from lxml import etree

# html=etree.parse('./test.html',etree.htmlparser())

# result=etree.tostring(html)

# print(result.decode('utf-8'))

#結果:多了乙個doctype宣告

# html=etree.parse('./test.html',etree.htmlparser())

# result=html.xpath('//*') #*補獲所有的節點,以列表的形式返回

# print(result)

# html=etree.parse('./test.html',etree.htmlparser())

# result=html.xpath('//li') #獲取所有li節點,以列表的形式返回

# print(result)

# print(result[0]) #獲取第乙個li節點

# html=etree.parse('./test.html',etree.htmlparser())

# result=html.xpath('//li/a') #獲取li下的a子節點,以列表的形式返回

# print(result)

# html=etree.parse('./test.html',etree.htmlparser())

# result=html.xpath('//ul/a') #獲取ul下的a子節點

# print(result)

#結果:因為在ul下沒有直接的子節點a,只有li,所以結果為空

#注:/:為獲取子節點 //:為獲取孫子節點

# html=etree.parse('./test.html',etree.htmlparser())

# result=html.xpath('//a[@href="link4.html"]/../@class') #先獲取href屬性為link4.html的a節點,# 然後再獲取其父節點,在獲取class屬性

# print(result)

# html=etree.parse('./test.html',etree.htmlparser())

# result=html.xpath('//a[@href="link4.html"]/parent::*/@class') #先獲取href屬性為link4.html的a節點,# 然後再獲取其父節點,在獲取class屬性

# print(result)

#屬性匹配

# html=etree.parse('./test.html',etree.htmlparser())

# result=html.xpath('//li[@class="item-1"]') #限制節點的屬性為item-1

# print(result)

#獲取文字

# html=etree.parse('./test.html',etree.htmlparser())

# result=html.xpath('//li[@class="item-0"]/text()')

# print(result)

# html=etree.parse('./test.html',etree.htmlparser())

# # result=html.xpath('//li[@class="item-0"]//text()') #獲取li所有子孫文字內容

# # print(result)

# html=etree.parse('./test.html',etree.htmlparser())

# result=html.xpath('//li[@class="item-0"]/a/text()') #獲取li的文字內容

# print(result)

# html=etree.parse('./test.html',etree.htmlparser())

# result=html.xpath('//li/a/@href') #通過@href獲取節點href的屬性

# print(result)

#屬性多值匹配

# text='''

# first item

# '''

# html=etree.html(text)

# result=html.xpath('//li[contains(@class,"li")]/a/text()')

# print(result)

#注:contains()方法可以實現多個屬性值的匹配,第乙個引數傳入屬性的名稱,第二個引數傳入屬性值

#多屬性匹配

# text='''

# first item

# '''

# html=etree.html(text)

# result=html.xpath('//li[contains(@class,"li") and @name="item"]/a/text()')

# print(result)

#注:contains(@class,"li") and @name="item" 使用and連線不同的屬性

# from lxml import etree

# text='''

# #

# # '''

# html=etree.html(text)

# result=html.xpath('//li[1]/a/text()')

# print(result)

# result=html.xpath('//li[last()]/a/text()')

# print(result)

# result=html.xpath('//li[position<3]/a/text()')

# print(result)

# result=html.xpath('//li[last()-2]/a/text()')

# print(result)

#結果:

# ['first item']

# #

# ['fourth item>']

text=

''''''

html=etree.html(text)

result=html.xpath(

'//li[1]/ancestor::*'

)#使用ancestor軸,獲取所有的祖先節點

print

(result)

#結果:獲取所有的li的祖先節點

result=html.xpath(

'//li[1]/ancestor::div'

)print

(result)

#結果:獲取div祖先節點

result=html.xpath(

'//li[1]/attribute::*'

)#使用attribute軸,獲取所有屬性值

print

(result)

#結果:獲取li的屬性值

result=html.xpath(

'//li[1]/child::a[@href="link1.html"]'

)#使用child軸,獲取直接子節點

print

(result)

result=html.xpath(

'//li[1]/descendant::*'

)#使用descendant軸,獲取子孫節點

print

(result)

result=html.xpath(

'//li[1]/following::*[2]'

)#使用following軸,獲取當前節點之後的所有節點

print

(result)

result=html.xpath(

'//li[1]/following-sibling::*'

)#使用following-sibling軸,獲取不包括當前節點的所有同級節點

print

(result)

python 爬蟲(XPATH使用)

xpath xml path language 是一門在xml文件中查詢資訊的語言,可用來在xml文件中對元素和屬性進行遍歷。w3school官方文件 pip install lxml 如果出現網路延遲,可使用清華源進行安裝匯入兩種匯入方式 第一種 直接匯入from lxml import etre...

python爬蟲XPath學習

xpath簡介和基本使用 1.前言 之前爬蟲的時候沒有用過xpath,就是沒用過lxml這個包,遇到json格式網頁我用的json.loads html格式用的beautifulsoup裡面有find和find all函式查詢標籤之類的。但是xpath在爬蟲裡面也算乙個比較重要的工具,當然要學習啦。...

python爬蟲學習 xpath

1.例項化乙個etree的物件,且需要將被解析的頁面原始碼資料載入到該物件中。2.呼叫etree物件中的xpath方法結合著xpath表示式實現標籤的定位和內容的捕獲。pip install lxml1.將本地的html文件中的原始碼資料載入etree物件中 etree.parse filepath...