日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

利用python爬虫(part8)--Xpath路径表达式

發布時間:2023/12/19 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用python爬虫(part8)--Xpath路径表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習筆記
編輯器:Sublime
注意:這里的理論部分是關于XML文檔的,但是介于HTML和XML的相似性,大家可以自行做類比,有的地方我也會用HTML和XML做類比。

上一篇:初識Xpath之Node節點


文章目錄

    • Xpath路徑表達式
      • 絕對路徑和相對路徑
      • 定位步與節點集
      • 軸及縮寫
      • 節點測試


Xpath路徑表達式

一個Xpath路徑表達式由若干個"定位步"構成,一個Xpath路徑表達式將返回一個節點集。Xpath路徑表達式的核心是,表示滿足一定條件的標記所組成的集合。

絕對路徑和相對路徑

Xpath路徑表達式由若干"定位步"從左向右用/連接而構成。Xpath路徑表達式分為絕對路徑和相對路徑,從根節點開始(Document節點)的路徑表達式稱為絕對路徑,否則為相對路徑。

現給出一個簡單的HTML文檔(這個文檔,之后也要用到),我們將這個文檔命名為test11.html:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Xpath</title> </head> <body><ol><li class="Ra01"><name class = 'Bunny01'>Huang</name><age>8</age><food>carrot</food></li><li class="Ra01"><name class = 'Bunny02'>Bai</name><age>10</age><food>celery</food></li><li class="Ra02"><name class = 'Bunny03'>Jack</name><age>20</age><food>cucumber</food></li><li class="Ra03"><name class = 'Bunny03'>Tim</name><age>30</age><food>straw</food></li></ol><div class='description'> <p>Bunny like to eat ....<a href="http://www.bunny.com/">Anything</a></p></div><div class='advertising'> <p>welcome to buy our product ....<a href="http://www.bunnyproduct.com/">Perfact!</a></p></div> </body> </html>

對于上面的html文件,我們寫個絕對路徑:

/html/head/title

可以說,用/開始的就是絕對路徑。

我們再寫一個相對路徑:

head/title

可以說,不用/開始的就是相對路徑。

定位步與節點集

  • 定位步

“定位步”是構成Xpath的基本單位,用于確定出相應的若干節點。一個定位步由一個軸(axis)、節點測試(node test)和可選的謂詞構成。

定位步格式:

軸::節點測試[謂詞]

"定位步"的作用找出節點;

軸的作用,是在樹形數據中,給出尋找節點的方向;

節點測試的作用,是給出尋找的節點應當屬于哪種細分的類型;

謂詞的作用,是給出所尋找的節點所需滿足的進一步條件。

在使用定位步時,必須要給出一個該定位步的節點,即當前節點

以上面的test11.html文檔為例,我們寫幾個定位步:

child::ol

上述定位步的軸為child,則當前節點會使用child軸尋找當前節點全部子節點。節點測試ol表示,限定所尋找的子節點名稱必須是ol,且節點類型必須是Element類型。

即,使用上述定位步所尋找的節點集,就是當前節點全部名字為ol的Element類型子節點。

如果我們對尋找的節點有點小要求,就可以使用謂詞,比如:

child::li[@class="Ra02"]

上述定位步的當前節點,首先要找出當前節點的名字是li的全部Element類型子節點,然后使用謂詞[@class="Ra02"]從中篩選出class屬性值為"Ra02"的Element子節點。

  • 節點集

Xpath路徑表達式,可以準確確定一個節點集,Xpath絕對路徑是以Document節點作為第1個定位步,該定位步不需要有軸、謂詞,習慣上稱Document節點為虛節點,因為在Xpath路徑中無法顯示的寫出該節點。

Xpath絕對路徑使用各個定位步最終尋找出一個節點集,尋找的規則如下:

Xpath路徑表達式尋找出的節點集也稱為Xpath路徑表達式返回的節點集,或Xpath路徑表達式的"值"

以上面的test11.html文檔為例,對于Xpath絕對路徑表達式:

/child::html/child::body/child::div

第一個定位步為:

Document節點(即,根節點)

第二個定位步為:

child::html

由于HTML文檔只有一個名為html的根標記,所以Document節點使用該定位步尋找出的節點集中只有一個名字是html的Element節點。

第三個定位步為:

child::body

Xpath在第2定位步后尋找的節點使用第3定位步尋找出的節點集中只有一個名字是body的Element節點。

第四定位步為:

child::div

Xpath在第3定位步后尋找的節點使用第4定位步尋找出的節點集中有2個Element,2個Element節點名字都是div, 2個Element節點的排序順序,就是名稱為div的3個標記在HTML文件中出現的先后順序。

簡單的說,/child::html/child::body/child::div最終返回的節點集就是HTML文件中名字是div的全部標記,但要求div標記的1級父節點是body,第2父節點是html.

軸及縮寫

現在給出幾個比較常用(???)的軸的縮寫和描述:

軸名及用法縮寫描述
child::節點測試節點測試當前節點的子節點
descendant::節點測試/節點測試當前節點的子孫節點
parent::節點測試..當前節點的父節點
ancestor::節點測試無縮寫當前節點的祖先節點
following::節點測試無縮寫當前節點的弟節點
preceding::節點測試無縮寫當前節點的兄節點
self::節點測試.當前節點
attribute::屬性名@屬性名當前節點所關聯的Attribute節點

節點測試

我們看一下幾個常見的節點測試以及作用:

節點測試作用
標記的名字尋找指定名字的Element類型節點
text()尋找Text類型節點
node()尋找Node類型節點
*尋找任意名字的Element類型節點
comment()尋找Comment類型節點

總結

以上是生活随笔為你收集整理的利用python爬虫(part8)--Xpath路径表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。