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

歡迎訪問 生活随笔!

生活随笔

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

python

python中xpath_Python爬虫之Xpath语法

發(fā)布時(shí)間:2024/1/23 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中xpath_Python爬虫之Xpath语法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

XPath 是一門在 XML 文檔中查找信息的語言。XPath 用于在 XML 文檔中通過元素和屬性進(jìn)行導(dǎo)航。

XPath 含有超過 100 個(gè)內(nèi)建的函數(shù)。這些函數(shù)用于字符串值、數(shù)值、日期和時(shí)間比較、節(jié)點(diǎn)和 QName 處理、序列處理、邏輯值等等。

XPath 是 W3C 標(biāo)準(zhǔn),XPath 于 1999 年 11 月 16 日 成為 W3C 標(biāo)準(zhǔn)。XPath 被設(shè)計(jì)為供 XSLT、XPointer 以及其他 XML 解析軟件使用。

在XPath 中,有七種類型的節(jié)點(diǎn):元素、屬性、文本、命名空間、處理指令、注釋以及文檔節(jié)點(diǎn)(或稱為根節(jié)點(diǎn))。

XML 文檔是被作為節(jié)點(diǎn)樹來對(duì)待的。樹的根被稱為文檔節(jié)點(diǎn)或者根節(jié)點(diǎn)。

一、選取節(jié)點(diǎn)

常用的路徑表達(dá)式:

表達(dá)式

描述

實(shí)例

nodename

選取nodename節(jié)點(diǎn)的所有子節(jié)點(diǎn)

xpath(‘//div’)

選取了div節(jié)點(diǎn)的所有子節(jié)點(diǎn)

/

從根節(jié)點(diǎn)選取

xpath(‘/div’)

從根節(jié)點(diǎn)上選取div節(jié)點(diǎn)

//

選取所有的當(dāng)前節(jié)點(diǎn),不考慮他們的位置

xpath(‘//div’)

選取所有的div節(jié)點(diǎn)

.

選取當(dāng)前節(jié)點(diǎn)

xpath(‘./div’)

選取當(dāng)前節(jié)點(diǎn)下的div節(jié)點(diǎn)

..

選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)

xpath(‘..’)

回到上一個(gè)節(jié)點(diǎn)

@

選取屬性

xpath(’//@calss’)

選取所有的class屬性

二、謂詞:被嵌在方括號(hào)內(nèi),用來查找某個(gè)特定的節(jié)點(diǎn)或包含某個(gè)制定的值的節(jié)點(diǎn)

表達(dá)式

結(jié)果

xpath(‘/body/div[1]’)

選取body下的第一個(gè)div節(jié)點(diǎn)

xpath(‘/body/div[last()]’)

選取body下最后一個(gè)div節(jié)點(diǎn)

xpath(‘/body/div[last()-1]’)

選取body下倒數(shù)第二個(gè)div節(jié)點(diǎn)

xpath(‘/body/div[positon()<3]’)

選取body下前兩個(gè)div節(jié)點(diǎn)

xpath(‘/body/div[@class]’)

選取body下帶有class屬性的div節(jié)點(diǎn)

xpath(‘/body/div[@class=”main”]’)

選取body下class屬性為main的div節(jié)點(diǎn)

xpath(‘/body/div[price>35.00]’)

選取body下price元素值大于35的div節(jié)點(diǎn)

三、通配符:Xpath通過通配符來選取未知的XML元素

表達(dá)式

結(jié)果

xpath(’/div/*’)

選取div下的所有子節(jié)點(diǎn)

xpath(‘/div[@*]’)

選取所有帶屬性的div節(jié)點(diǎn)

四、取多個(gè)路徑:使用“ | 運(yùn)算符可以選取多個(gè)路徑

表達(dá)式

結(jié)果

xpath(‘//div|//table’)

選取所有的div和table節(jié)點(diǎn)

五、Xpath軸:軸可以定義相對(duì)于當(dāng)前節(jié)點(diǎn)的節(jié)點(diǎn)集

軸名稱

表達(dá)式

描述

ancestor

xpath(‘./ancestor::*’)

選取當(dāng)前節(jié)點(diǎn)的所有先輩節(jié)點(diǎn)(父、祖父)

ancestor-or-self

xpath(‘./ancestor-or-self::*’)

選取當(dāng)前節(jié)點(diǎn)的所有先輩節(jié)點(diǎn)以及節(jié)點(diǎn)本身

attribute

xpath(‘./attribute::*’)

選取當(dāng)前節(jié)點(diǎn)的所有屬性

child

xpath(‘./child::*’)

返回當(dāng)前節(jié)點(diǎn)的所有子節(jié)點(diǎn)

descendant

xpath(‘./descendant::*’)

返回當(dāng)前節(jié)點(diǎn)的所有后代節(jié)點(diǎn)(子節(jié)點(diǎn)、孫節(jié)點(diǎn))

following

xpath(‘./following::*’)

選取文檔中當(dāng)前節(jié)點(diǎn)結(jié)束標(biāo)簽后的所有節(jié)點(diǎn)

following-sibing

xpath(‘./following-sibing::*’)

選取當(dāng)前節(jié)點(diǎn)之后的兄弟節(jié)點(diǎn)

parent

xpath(‘./parent::*’)

選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)

preceding

xpath(‘./preceding::*’)

選取文檔中當(dāng)前節(jié)點(diǎn)開始標(biāo)簽前的所有節(jié)點(diǎn)

preceding-sibling

xpath(‘./preceding-sibling::*’)

選取當(dāng)前節(jié)點(diǎn)之前的兄弟節(jié)點(diǎn)

self

xpath(‘./self::*’)

選取當(dāng)前節(jié)點(diǎn)

六、功能函數(shù):使用功能函數(shù)能夠更好的進(jìn)行模糊搜索

函數(shù)

用法

解釋

starts-with

xpath(‘//div[starts-with(@id,”ma”)]‘)

選取id值以ma開頭的div節(jié)點(diǎn)

contains

xpath(‘//div[contains(@id,”ma”)]‘)

選取id值包含ma的div節(jié)點(diǎn)

and

xpath(‘//div[contains(@id,”ma”) and contains(@id,”in”)]‘)

選取id值包含ma和in的div節(jié)點(diǎn)

text()

xpath(‘//div[contains(text(),”ma”)]‘)

選取節(jié)點(diǎn)文本包含ma的div節(jié)點(diǎn)

七、常用函數(shù):

1、精確定位

(1)contains(str1,str2)用來判斷str1是否包含str2

例1://*[contains(@class,'c-summaryc-row ')]選擇@class值中包含c-summary c-row的節(jié)點(diǎn)

例2://div[contains(.//text(),'價(jià)格')]選擇text()中包含價(jià)格的div節(jié)點(diǎn)

(2)position()選擇當(dāng)前的第幾個(gè)節(jié)點(diǎn)

例1://*[@class='result'][position()=1]選擇@class='result'的第一個(gè)節(jié)點(diǎn)

例2://*[@class='result'][position()<=2]選擇@class='result'的前兩個(gè)節(jié)點(diǎn)

(3)last()選擇當(dāng)前的倒數(shù)第幾個(gè)節(jié)點(diǎn)

例1://*[@class='result'][last()]選擇@class='result'的最后一個(gè)節(jié)點(diǎn)

例2://*[@class='result'][last()-1]選擇@class='result'的倒數(shù)第二個(gè)節(jié)點(diǎn)

(4)following-sibling 選取當(dāng)前節(jié)點(diǎn)之后的所有同級(jí)節(jié)點(diǎn)

例1://div[@class='result']/following-sibling::div選擇@class='result'的div節(jié)點(diǎn)后所有同級(jí)div節(jié)點(diǎn)找到多個(gè)節(jié)點(diǎn)時(shí)可通過position確定第幾個(gè)如://div[@class='result']/following-sibling::div[position()=1]

(5)preceding-sibling 選取當(dāng)前節(jié)點(diǎn)之前的所有同級(jí)節(jié)點(diǎn)

使用方法同following-sibling

2、過濾信息

(1)substring-before(str1,str2)用于返回字符串str1中位于第一個(gè)str2之前的部分

例子:substring-before(.//*[@class='c-more_link']/text(),'條')

返回.//*[@class='c-more_link']/text()中第一個(gè)'條'前面的部分,如果不存在'條',則返回空值

(2)substring-after(str1,str2)跟substring-before類似,返回字符串str1中位于第一個(gè)str2之后的部分

例1:substring-after(.//*[@class='c-more_link']/text(),'條')

返回.//*[@class='c-more_link']/text()中第一個(gè)’條’后面的部分,如果不存在'條',則返回空值

例2:substring-after(substring-before(.//*[@class='c-more_link']/text(),'新聞'),'條')

返回.//*[@class='c-more_link']/text()中第一個(gè)'新聞'前面與第一個(gè)'條'后面之間的部分

(3)normalize-space()

用來將一個(gè)字符串的頭部和尾部的空白字符刪除,如果字符串中間含有多個(gè)連續(xù)的空白字符,將用一個(gè)空格來代替

例子:normalize-space(.//*[contains(@class,'c-summaryc-row ')])

(4)translate(string,str1,str2)

假如string中的字符在str1中有出現(xiàn),那么替換為str1對(duì)應(yīng)str2的同一位置的字符,假如str2這個(gè)位置取不到字符則刪除string的該字符

例子:translate('12:30','03','54')結(jié)果:'12:45'

3、拼接信息

(1)concat()函數(shù)用于串連多個(gè)字符串

例子:concat('http://baidu.com',.//*[@class='c-more_link']/@href)

總結(jié)

以上是生活随笔為你收集整理的python中xpath_Python爬虫之Xpath语法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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