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/ ,謝謝合做。