chrome瀏覽器安裝Xpath Helper插件


最近偷空研究了一下python,准備用python寫一個爬蟲。

在使用scrapy,爬取網頁信息時,我需要去定位節點,所以也就有了下面這篇文章。

例子代碼:

 1 import scrapy
 2 from tutorial.items import DemozItem
 3 
 4 class DmozSpider(scrapy.Spider):
 5     name = "dmoz"
 6     allowed_domains = ["dmoz.org"]
 7     start_urls = [
 8         "file:///D:/pyscrapy/tutorial/tutorial/spiders/test.html"
 9     ]
10     def parse(self, response):
11         #將爬取的數據以Item對象的形式返回
12         for sel in response.xpath("//p/a[@name='鏈接']"):
13             #item = DemozItem()
14             list = sel.xpath('text()').extract()
15             if len(list) != 0:
16                 print(list[0].replace(' ', ''))

從例子代碼中可以看到xpath()方法中的參數為xpath路徑表達式。我要去寫我所需要信息的xpath,才能抓取到我需要的信息,所以書寫xpath表達式是必然的。當然你也可以直接在chrome瀏覽器中按F12,在你所要選擇的元素上右鍵-Copy-Copy XPath,但是這樣獲取的xpath一般可能不夠准確。所以,最好還是學習一下XPath語法。

在探索中我找到了一個可以很方便查找xpath表達式的插件,由於我是chrome瀏覽器所以安裝這個插件網上很多介紹,你可以去這里下載並了解這個插件:在這里 這里面講解很詳細包括安裝和使用。

 

XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對元素和屬性進行遍歷。(W3School 中有一些用法)

 

 

實例1:獲取name為“現病史”結點父節點的父節點(p):【可以看到表達式鎖定的p顏色為標記為了黃色。】

//span[1]/a[@name='現病史']/parent::node()[1]/parent::node()

 

 

實例2:獲取子節點(child::node()[1]代表取子節點的第一個,如果不寫則是取所有):

//td/p/child:node()

 

可以看到一共匹配了376個結果,當前是第九個滿足匹配的節點。

 

實例3:獲取文本內容為 “手術外傷史” 的同級標簽:

//p[span="手術外傷史:"]/child::node()

 

 

實例4:獲取p標簽,p的子節點的文本中包含  ”婚姻史“ 或者 “婚育史” 

.//p[contains(.,'婚姻史')]| .//p[contains(.,'婚育史')]

圖1:

圖2:

 

實例5:獲取子標簽文本中包含 “初步診斷” 文本的tbody標簽:

.//tbody[tr[td[p[contains(.,'初步診斷')]]]]

 

實例6:【某x標簽后的第一個y標簽】獲取“輔助檢查“所在p標簽后的第一個table標簽:

.//p[contains(.,'輔助檢查')]/following-sibling::table[1]

 

實例7:【下一個兄弟節點】獲取子節點中某name屬性值為”體格檢查“的p標簽的下一個兄弟節點:

.//p[span[a[@name="體格檢查"]]]/following-sibling::*[1]

 

 

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