Python爬蟲基礎講解(七):xpath的語法

松鼠愛出餅乾發表於2021-05-15

xpath語法

XPath使用路徑表示式來選取XML文件中的節點或者節點集。這些路徑表示式和我們在常規的電腦檔案系統中看到的表示式非常相似。

下面列出了最有用的表示式:

Python爬蟲基礎講解(七):xpath的語法

 

在下面的表格中,我們已列出了一些路徑表示式以及表示式的結果:

 

Python爬蟲基礎講解(七):xpath的語法

選取未知節點

 

Python爬蟲基礎講解(七):xpath的語法

在下面的表格中,我們列出了一些路徑表示式,以及這些表示式的結果:

 

Python爬蟲基礎講解(七):xpath的語法

案例

Python爬蟲基礎講解(七):xpath的語法
import parsel # str --> Selector物件具有xpath方法
提取到的資料返回一個列表
html_str = """
    <div>
          <ul>
                <li class="item-i">
                    <a href="link1.html">第一個</a>
                </li>

                <1iclass="item-2個>J學言
                    <a href="link2. html">第二個</a>
                </li>

                <li class="item-3">
                    <a href="link3.html">第三個</a>
                </li>

                <li class="item-4">
                    <a href="link4.html">第四個</a>
                </li>
 
                 <li class="item-5">
                    <a href="link5.html">第五個</a>
                </li>
          </ul>
    </div>
# 1、轉換資料型別
# data = parsel.Selector(html_str).extract()  
# parsel能夠把缺失的html標籤補充完成
data = parsel.Selector (html_str)  # parsel能夠把缺失的html標籤補充完成
# 2、解析資料--list型別
# print(data)
# 2、1從根節點開始,獲取所有<a>標籤
result = data.xpath(' /html/body/ div/ul/li/a').extract()
# 2、2跨節點獲取所有<a>標籤
result = data. xpath('/ /a').extract()
# 2、3選取當前節點――使用場景:需要對選取的標籤的下一級標籤進行多次提取
result = data.xpath('//ul')
result2 = result.xpath(' ./li').extract()  #提取當前節點下的<li>標籤
result3 = result.xpath(' ./li/a').extract()  #提取當前節點下的<a>標籤
# 2、4選取當前節點的父節點,獲取父節點的class屬性值
result = data.xpath(' //a')
result4 = result.xpath('../@class').extract()
# 2、5獲取第三個<li>標籤的節點(兩種方法)
result = data. xpath('//li[3]').extract()
result = data. xpath(' / /1i')[2].extract()
# 2、6 通過定位屬性的方法獲取第四個<a>標籤
result = data. xpath(' / / a [@href="link4.html"]’).extract()
#2、7用屬性定位標籤,獲取第四個<a>標籤包裹的文字內容
result = data.xpath('//a[@href="link4.html"]/text()' ). extract()
#2、8獲取第五個<a>標籤的href屬性值
result = data. xpath(' / /1i[5]/a/@href').extract(#瞭解模糊查詢
result = data.xpath('//li[contains(@class,"it")]’).extract ()
#同時獲取<li>標籤的屬性以及<a>標籤的文字
# result = data.xpath('//li/@class|//a/text()').extract()

print (result)

 

如何選取多個標籤?

通過在路徑表示式中使用“”運算子,您可以選取若干個路徑。(邏輯運算子)

小結

  1. xpath的概述XPath (XML Path Language),解析查詢提取資訊的語言
  2. xpath的節點關係:根節點,子節點,同級節點
  3. xpath的重點語法獲取任意節點://
  4. xpath的重點語法根據屬性獲取節點:標籤[@屬性=’值’]
  5. xpath中獲取節點的文字:text )
  6. xpath的獲取節點屬性值:@屬性名

 

相關文章