XPath

一、什麼是XPath

  XPath在Python的爬蟲學習中,起着舉足輕重的地位,對比正則表達式 re二者能夠完成一樣的工做,實現的功能也差很少,但XPath明顯比re具備優點,在網頁分析上使re退居二線。  python

  XPath是什麼? 全稱爲XML Path Language 一種小型的查詢語言說道XPath是門語言。正則表達式

二、爲何要使用XPath

  • Xpath的優勢函數

  • 可在XML中查找信息
  • 支持HTML的查找
  • 經過元素和屬性進行導航學習

三、怎麼用XPath

python開發使用XPath條件:
因爲XPath屬於lxml庫模塊,因此首先要安裝庫lxml。XPath的簡單調用方法code

from lxml import etree
# 將源碼轉化爲能被XPath匹配的格式
selector=etree.HTML(源碼) 

# 返回爲一列表
selector.xpath(表達式)

四、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()   指的是提取第一個
相關文章
相關標籤/搜索