Python爬蟲:Xpath語法筆記

原文出處: j_hao104
一、選取節點常用的路勁表達式:
表達式
描述
實例

nodename
選取nodename節點的所有子節點
xpath(‘//div’)
選取了div節點的所有子節點

/
從根節點選取
xpath(‘/div’)
從根節點上選取div節點

//
選取所有的當前節點,不考慮他們的位置
xpath(‘//div’)
選取所有的div節點

.
選取當前節點
xpath(‘./div’)
選取當前節點下的div節點

..
選取當前節點的父節點
xpath(‘..’)
回到上一個節點

@
選取屬性
xpath(’//@calss’)
選取所有的class屬性

二、謂語
謂語被嵌在方括號內,用來查找某個特定的節點或包含某個制定的值的節點
實例:

表達式
結果

xpath(‘/body/div[1]’)
選取body下的第一個div節點

xpath(‘/body/div[last()]’)
選取body下最后一個div節點

xpath(‘/body/div[last()-1]’)
選取body下倒數第二個div節點

xpath(‘/body/div[positon()<3]’)
選取body下前兩個div節點

xpath(‘/body/div[@class]’)
選取body下帶有class屬性的div節點

xpath(‘/body/div[@class=”main”]’)
選取body下class屬性為main的div節點

xpath(‘/body/div[price>35.00]’)
選取body下price元素值大于35的div節點

** 三、通配符**
Xpath通過通配符來選取未知的XML元素
表達式
結果

xpath(’/div/*’)
選取div下的所有子節點

xpath(‘/div[@*]’)
選取所有帶屬性的div節點

四、取多個路徑
使用“|”運算符可以選取多個路徑
表達式
結果

xpath(‘//div|//table’)
選取所有的div和table節點

五、Xpath軸
軸可以定義相對于當前節點的節點集
軸名稱
表達式
描述

ancestor
xpath(‘./ancestor::*’)
選取當前節點的所有先輩節點(父、祖父)

ancestor-or-self
xpath(‘./ancestor-or-self::*’)
選取當前節點的所有先輩節點以及節點本身

attribute
xpath(‘./attribute::*’)
選取當前節點的所有屬性

child
xpath(‘./child::*’)
返回當前節點的所有子節點

descendant
xpath(‘./descendant::*’)
返回當前節點的所有后代節點(子節點、孫節點)

following
xpath(‘./following::*’)
選取文檔中當前節點結束標簽后的所有節點

following-sibing
xpath(‘./following-sibing::*’)
選取當前節點之后的兄弟節點

parent
xpath(‘./parent::*’)
選取當前節點的父節點

preceding
xpath(‘./preceding::*’)
選取文檔中當前節點開始標簽前的所有節點

preceding-sibling
xpath(‘./preceding-sibling::*’)
選取當前節點之前的兄弟節點

self
xpath(‘./self::*’)
選取當前節點

**六、功能函數 **
使用功能函數能夠更好的進行模糊搜索
函數
用法
解釋

starts-with
xpath(‘//div[starts-with(@id,”ma”)]‘)
選取id值以ma開頭的div節點

contains
xpath(‘//div[contains(@id,”ma”)]‘)
選取id值包含ma的div節點

and
xpath(‘//div[contains(@id,”ma”) and contains(@id,”in”)]‘)
選取id值包含ma和in的div節點

text()
xpath(‘//div[contains(text(),”ma”)]‘)
選取節點文本包含ma的div節點

自己添加

<div id="test3">我左青龍,<span id="tiger">右白虎,<ul>上朱雀,<li>下玄武。</li></ul>老牛在當中,</span>龍頭在胸口。<div>
解析text內容
使用xpath的string(.)
以第三段代碼為例:
data = selector.xpath('//div[@id="test3"]')info = data.xpath('string(.)').extract()[0]

這樣,就可以把“我左青龍,右白虎,上朱雀,下玄武。老牛在當中,龍頭在胸口”整個句子提取出來,賦值給info變量。
scrapy xpath文檔:http://doc.scrapy.org/en/0.14/topics/selectors.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容