# 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...