什麼是Xpath?
Xpath 是一門在XML或者html文檔中導航查找信息的語法,對HTML有很好的支持 xpath 是一個w3c的標準;xpath 包含標準庫;
Xpath語法的詳細用法?
- 1.節點關係 (層次關係)
- 2.節點選擇
2.1節點選擇
表達式:nodename |/ |// | . | .. | @
nodename: 選取此節點的所有子節點
/ :從根節點選取
//div: 選取所有div子元素,而不考慮他們的位置
. : 選取當前節點
.. : 選取當前節點的父節點
@ : 選取屬性
用法舉例:
Nodename//div:選取所有屬於nodename元素的後代的div元素,不管在nodename之後的任意位置;
/article/div[1]:選取屬於article子元素的第一個div元素
/article/div[last()]:選取屬於article子元素的最後一個div元素
/article/div[last()-1]:選取屬於article子元素的倒數第二個div元素
//@class :選取所有名爲class的屬性;
//div[@lang]:選取所有擁有lang屬性的div元素
//div[@lang=“eng”]:選取所有lang屬性爲eng的div元素
/div/*:選取屬於div元素的所有子節點
//* :選取所有元素
//div[@*]:選取所有帶屬性的title元素
/div/a|//div/p :選取所有div元素的a和p元素
//span|//ul :選取文檔中的span和ul元素
Article/div/p|//span :選取所有屬於article元素的div元素的p元素以及文檔中的所有的span元素;
2.2 Xpath語法中的謂語用來查找某個特定的節點或者包含某個指定值的節點,謂語被嵌套在方括號內;
- 3.使用技巧
3.1:"*" 通配符,他可以匹配任何元素節點;
3.2:/text()可以獲取標籤中的文字信息
3.3:結果爲列表的數據結構,可以通過切片獲取字符串數據結構。
3.4:遇到相同的字符開頭的多個標籤,相同時爬取時,不需要構造多個Xpath 路徑,通過starts-with(@屬性名稱,屬性字符相同的部分)便可獲取多個標籤內容;
用法舉例:
<li class = "tag-1">需要的內容1</li>
<li class = "tag-1">需要的內容2</li>
<li class = "tag-1">需要的內容3</li>
獲取內容:選取所有class屬性爲tag的div元素
Contents = selector.xpath('//li[starts-with(@class,"tag")]/text()')
for content in Contents:
print(content)
# starts-with() 可獲取類似標籤的信息
3.5:當遇到標籤套標籤情況時:
用法舉例:
<div class = “red”>需要的內容1
<h1>需要的內容2</h1>
</div>
#相同時爬取內容可以通過 string(.)完成;
#選取所有class屬性爲red的div元素;
from lxml import etree
html2 = '''
<div class = "red"> 需要的內容1
<h1>需要的內容2</h1>
</div>
'''
selector = etree.HTMl(html2)
content1 = selector.Xpath("//div[@class = "red"]")[0]
content2 = selector.Xpath('string(.)')
print(content2)