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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

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

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

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

上一篇:初識Xpath之Node節(jié)點


文章目錄

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


Xpath路徑表達(dá)式

一個Xpath路徑表達(dá)式由若干個"定位步"構(gòu)成,一個Xpath路徑表達(dá)式將返回一個節(jié)點集。Xpath路徑表達(dá)式的核心是,表示滿足一定條件的標(biāo)記所組成的集合。

絕對路徑和相對路徑

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

現(xiàn)給出一個簡單的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

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

定位步與節(jié)點集

  • 定位步

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

定位步格式:

軸::節(jié)點測試[謂詞]

"定位步"的作用找出節(jié)點;

軸的作用,是在樹形數(shù)據(jù)中,給出尋找節(jié)點的方向;

節(jié)點測試的作用,是給出尋找的節(jié)點應(yīng)當(dāng)屬于哪種細(xì)分的類型;

謂詞的作用,是給出所尋找的節(jié)點所需滿足的進(jìn)一步條件。

在使用定位步時,必須要給出一個該定位步的節(jié)點,即當(dāng)前節(jié)點

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

child::ol

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

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

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

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

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

  • 節(jié)點集

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

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

Xpath路徑表達(dá)式尋找出的節(jié)點集也稱為Xpath路徑表達(dá)式返回的節(jié)點集,或Xpath路徑表達(dá)式的"值"

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

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

第一個定位步為:

Document節(jié)點(即,根節(jié)點)

第二個定位步為:

child::html

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

第三個定位步為:

child::body

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

第四定位步為:

child::div

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

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

軸及縮寫

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

軸名及用法縮寫描述
child::節(jié)點測試節(jié)點測試當(dāng)前節(jié)點的子節(jié)點
descendant::節(jié)點測試/節(jié)點測試當(dāng)前節(jié)點的子孫節(jié)點
parent::節(jié)點測試..當(dāng)前節(jié)點的父節(jié)點
ancestor::節(jié)點測試無縮寫當(dāng)前節(jié)點的祖先節(jié)點
following::節(jié)點測試無縮寫當(dāng)前節(jié)點的弟節(jié)點
preceding::節(jié)點測試無縮寫當(dāng)前節(jié)點的兄節(jié)點
self::節(jié)點測試.當(dāng)前節(jié)點
attribute::屬性名@屬性名當(dāng)前節(jié)點所關(guān)聯(lián)的Attribute節(jié)點

節(jié)點測試

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

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。