XPath在Python的爬蟲學習中,起着舉足輕重的地位,對比正則表達式 re二者能夠完成一樣的工做,實現的功能也差很少,但XPath明顯比re具備優點,在網頁分析上使re退居二線。 python
XPath是什麼? 全稱爲XML Path Language 一種小型的查詢語言說道XPath是門語言。正則表達式
Xpath的優勢函數
經過元素和屬性進行導航學習
python開發使用XPath條件:
因爲XPath屬於lxml庫模塊,因此首先要安裝庫lxml。XPath的簡單調用方法code
from lxml import etree # 將源碼轉化爲能被XPath匹配的格式 selector=etree.HTML(源碼) # 返回爲一列表 selector.xpath(表達式)
1.選取節點xml
nodename 選取nodename節點的全部子節點 xpath(‘//div’) 選取了全部div節點 / 從根節點選取 xpath(‘/div’) 從根節點上選取div節點 // 選取全部的當前節點,不考慮他們的位置 xpath(‘//div’) 選取全部的div節點 . 選取當前節點 xpath(‘./div’) 選取當前節點下的div節點 .. 選取當前節點的父節點 xpath(‘..’) 回到上一個節點 @ 選取屬性 xpath(’//@calss’) 選取全部的class屬性
2.謂語開發
''' 表達式: 結果: 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節點 ''' ret=selector.xpath("//p[@class='story']//a[2]") ret=selector.xpath("//p[@class='story']//a[last()]")
3.通配符文檔
''' 通配符 Xpath經過通配符來選取未知的XML元素。 表達式: 結果: xpath(’/div/*’) 選取div下的全部子節點 xpath(‘/div[@*]’) 選取全部帶屬性的div節點 ''' ret=selector.xpath("//p[@class='story']/*") ret=selector.xpath("//p[@class='story']/a[@class]")
4.取多個路勁源碼
''' 使用「|」運算符能夠選取多個路徑 表達式: 結果: xpath(‘//div|//table’) 選取全部的div和table節點 ''' ret=selector.xpath("//p[@class='story']/a[@class]|//div[@class='d3']") print(ret)
5.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::*’) 選取當前節點
6.功能函數
函數 | 用法 | 解釋 |
---|---|---|
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節點 |
7.extract() 與 extract_frist()
extract() 指的是提取全部 extract_frist() 指的是提取第一個