Xpath語法詳解

xpath 語法node

  response.selector屬性返回內容至關於response的body構造了一個Selector對象。git

  Selector對象能夠調用xpath()方法實現信息的解析提取。github

  在xpath()後使用extract()能夠返回全部的元素結果。bash

  若xpath()有問題,那麼extract()會返回一個空列表。學習

  在xpath()後使用extract_first()能夠返回第一個元素結果。spa

選擇直接子節點對象

  {node}/{node1}: 選擇從{node}的直接子節點中選擇標籤爲{node1}節點.
  /node[1] 返回的是全部父節點下,第一個出現的節點blog

選擇全部的子節點資源

  //{node}: 選擇根節點下全部標籤爲{node}的子節點.
  //{node}//{node1}: 選擇根節點下全部標籤爲{node1}且父節點包含標籤{node}的節點文檔

從選擇的子節點列表中選擇第n個子節點

  //{node}[n]: 先把兄弟節點聚合在一個list變成[list_1, list_2, ...], 而後從每一個list中選擇第n個, 若是list的長度不足n個則跳過.
  (//{node})[n]: 把全部選擇的節點放在一條list, 而後從這個list中選擇第n個
  //div[@id='details']/following-sibling::a[1] 獲取id爲details標籤的下一個a標籤
  //div[@id='details']/following-sibling::*[N] 獲取id爲details標籤後面的第N個標籤
  //div[@id='details']/preceding-sibling::a[1] 獲取id爲details標籤的上一個a標籤
  //div[@id='details']/preceding-sibling::*[N] 獲取id爲details標籤前面的第N個標籤
  //div[@class="details"]/span[last()] 獲取span最後一個節點
  //div[@class="details"]/span[last()-1] 獲取span倒數第二個節點

  獲取第三個a標籤的父標籤:"//a[@id=='3']/.."

使用節點屬性做爲選擇條件

  {node}[@{attr}='{val}']: 選中節點必須有名字爲{attr}的屬性, 且這個屬性的值等於{val}.
  {node}[contains(@{attr}, '{val}']: 選中節點必須有名字爲'{attr}'的屬性, 且這個屬性的值包含{val}.

提取節點屬性的值

  {node}/@{attr}: 提取選擇節的點中屬性名爲{attr}的值.

提取節點中的文本內容

  {node}/text(): 提取當前選擇節點的文本內容, 不包括子節點的文本.
  {node}//text(): 提取選擇節點的文本內容, 包括子節點的文本.

選取若干路徑

  //title | //price 選取文檔中的全部 title 和 price 元素。

過濾特定的標籤屬性

  //div[contains(@class,"details") and not(contains(name(.),"img"))]
  //div[contains(@class,"details")][name(.)!='img']
  //p[@class="details"]/*[not(name()="img")]
  //node[contains(text(),substring] 全部節點名爲node,且其文本中包含substring的節點
  //div[@id="pagination"]//a[contains(text(),"下一頁")] 全部包含「下一頁」字符串的超連接節點
  //*[count(span)=2] 全部包含兩個span孩子節點的節點
  //*[count(*)=2] 全部包含兩個孩子節點的節點
  //*[name()='dd'] 全部名字爲dd的節點,等同於//dd
  //*[string-length(name())=3] 名字長度爲3個字母的節點
  /child::dd 等價於/dd
  //dd/descendant::* 全部以dd爲其祖先的節點
  //dd/parent::* dd節點的全部父節點
  //dd[position() mod 2 = 0] 偶數位置的dd節點
  author[not(last-name = "adv")] 全部不包含元素last-name值爲adv的節點
  P/text()[2] 當前上下文節點中的P節點的第二個文本節點
  ancestor::BOOK[1] 離當前上下文節點最近的book祖先節點
  //node[text()="next"] 錨文本內容等於next的node節點
  //div[@class="details"]/span[last()] 獲取span最後一個節點
  //div[@class="details"]/span[last()-1] 獲取span倒數第二個節點

  starts-with:匹配屬性節點對應開始位置的關鍵字,對應的有ends-with,//*[starts-with(@class,'copyRight')]
  contain:匹配屬性節點對應包含的關鍵字,//div[contains(@class,'login')]
  and 與的關係,//div[contains(@id,'root') and contains(@id,'admin')]
  not 返回全部非屬性id=root的div,//div[not (@id='root')]
  在xpath表達式中使用變量
  在xpath表達式中是${varname}定義變量, 相似於bash

符號 說明

  / 從根節點選取,使用絕對路徑,路徑必須徹底匹配
  // 從整個文檔中選取,使用相對路徑
  . 從當前節點開始選取
  .. 從當前節點父節點開始選取
  @ 選取屬性
  /* 模糊匹配

XPath軸(XPath Axes)可定義某個相對於當前節點的節點集:

一、child 選取當前節點的全部子元素
二、parent 選取當前節點的父節點
三、descendant 選取當前節點的全部後代元素(子、孫等)
四、ancestor 選取當前節點的全部先輩(父、祖父等)
五、descendant-or-self 選取當前節點的全部後代元素(子、孫等)以及當前節點自己
六、ancestor-or-self 選取當前節點的全部先輩(父、祖父等)以及當前節點自己
七、preceding-sibling 選取當前節點以前的全部同級節點
八、following-sibling 選取當前節點以後的全部同級節點
九、preceding 選取文檔中當前節點的開始標籤以前的全部節點
十、following 選取文檔中當前節點的結束標籤以後的全部節點
十一、self 選取當前節點
十二、attribute 選取當前節點的全部屬性
1三、namespace 選取當前節點的全部命名空間節點

備註:做者:Jason Zeng 於 2021-04-12博客:http://www.cnblogs.com/zengming/ GItHub:https://github.com/lovelifeming嚴正聲明:1.因爲本博客部分資源來自互聯網,版權均歸原做者全部。轉載的目的是用於學術交流與討論學習,將不對任何資源負法律責任。2.若無心中侵犯到您的版權利益,請來信聯繫我,我會在收到信息後會儘快給予處理!3.全部資源內容僅供學習交流之用,請勿用做商業用途,謝謝。4.若有轉發請註明出處,來源於http://www.cnblogs.com/zengming/ ,謝謝合做。

相關文章
相關標籤/搜索