xpath提取包含標簽的所有文本內容 - xpath常用語法匯總


好久沒有用python寫爬蟲了,好多xpath語法都已經有點生疏了。
結合自己之前整理的資料,在這里做一下xpath常用語法總結,以及本次用到的需求是爬取某個節點下的所有內容(包含標簽也需要獲取)
常用定位語句實例

首先解決獲取標簽下所有內容的問題:
三人行書屋為例:
首頁截圖
我要獲取 class="pagewrapper"的div下的所有內容,xpath寫法:content_list = div[@class="pagewrapper"]這樣我就獲取到整個dom。使用scrapy的xpath提取方法:
content_list.getall()

1. //NODE[not(@class)] 所有節點名為node,且不包含class屬性的節點
2. //NODE[@class and @id] 所有節點名為node,且同時包含class屬性和id屬性的節點
3. //NODE[contains(text(),substring] 所有節點名為node,且其文本中包含substring的節點
//A[contains(text(),\"下一頁\")] 所有包含“下一頁”字符串的超鏈接節點
//A[contains(@title,"文章標題")] 所有其title屬性中包含“文章標題”字符串的超鏈接節點
4. //NODE[@id="myid"]/text() 節點名為node,且屬性id為myid的節點的所有直接text子節點
5. BOOK[author/degree] 所有包含author節點同時該author節點至少含有一個的degree孩子節點的book節點
6. AUTHOR[.="Matthew Bob"] 所有值為“Matthew Bob”的author節點
7. //*[count(BBB)=2] 所有包含兩個BBB孩子節點的節點
8. //*[count(*)=2] 所有包含兩個孩子節點的節點
9. //*[name()='BBB'] 所有名字為BBB的節點,等同於//BBB
10. //*[starts-with(name(),'B')] 所有名字開頭為字母B的節點
11. //*[contains(name(),'C')] 所有名字中包含字母C的節點
12. //*[string-length(name()) = 3] 名字長度為3個字母的節點
13. //CCC | //BBB 所有CCC節點或BBB節點
14. /child::AAA 等價於/AAA
15. //CCC/descendant::* 所有以CCC為其祖先的節點
16. //DDD/parent::* DDD節點的所有父節點
17. //BBB[position() mod 2 = 0] 偶數位置的BBB節點
18. AUTHOR[not(last-name = "Bob")] 所有不包含元素last-name的值為Bob的節點
19. P/text()[2] 當前上下文節點中的P節點的第二個文本節點
20. ancestor::BOOK[1] 離當前上下文節點最近的book祖先節點
21. //A[text()="next"] 錨文本內容等於next的A節點

查找,某屬性不為某值的節點
如內容:

<option value="">Club</option>
<option value="281">Manchester City</option>
<option value="985">Manchester United</option>
<option value="148">Tottenham Hotspur</option>

選擇value不為 “”的節點

op = e_html.xpath('//option[not(@value="")]')
starts-with 顧名思義,匹配一個屬性開始位置的關鍵字
contains 匹配一個屬性值中包含的字符串
text() 匹配的是顯示文本信息,此處也可以用來做定位用
eg
//input[starts-with(@name,'name1')]     查找name屬性中開始位置包含'name1'關鍵字的頁面元素
//input[contains(@name,'na')]         查找name屬性中包含na關鍵字的頁面元素
<a href="http://www.baidu.com">百度搜索</a>;
xpath寫法為 //a[text()='百度搜索'] 
或者 //a[contains(text(),"百度搜索")]

找出table節點的class包含 tablesaw的所有table節點 
>> '//table[contains(@class,"tablesaw")]'

xpath相對節點查找方法

XPath軸(XPath Axes)可定義某個相對於當前節點的節點集: 
1、child 選取當前節點的所有子元素 
2、parent 選取當前節點的父節點 
3、descendant 選取當前節點的所有后代元素(子、孫等) 
4、ancestor 選取當前節點的所有先輩(父、祖父等) 
5、descendant-or-self 選取當前節點的所有后代元素(子、孫等)以及當前節點本身 
6、ancestor-or-self 選取當前節點的所有先輩(父、祖父等)以及當前節點本身 
7、preceding-sibling 選取當前節點之前的所有同級節點 
8、following-sibling 選取當前節點之后的所有同級節點 
9、preceding 選取文檔中當前節點的開始標簽之前的所有節點 
10、following 選取文檔中當前節點的結束標簽之后的所有節點 
11、self 選取當前節點 
12、attribute 選取當前節點的所有屬性 
13、namespace 選取當前節點的所有命名空間節點 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM