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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

python

python xpath定位元素方法_Python爬虫杂记 - Xpath高级用法

發(fā)布時(shí)間:2023/12/13 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python xpath定位元素方法_Python爬虫杂记 - Xpath高级用法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

xpath 高級(jí)用法

1. 匹配當(dāng)前節(jié)點(diǎn)下的所有: .//

. 表示當(dāng)前

// 表示當(dāng)前標(biāo)簽下的所有標(biāo)簽

注: 要配合使用

2. 匹配某標(biāo)簽的屬性值: /@屬性名稱

這里以input里的value值為例:

例:xpath(//input/@value)

3. 匹配多個(gè)路徑:|

在一個(gè)xpath中寫的多個(gè)表達(dá)式用 | 分開(kāi), 每個(gè)表達(dá)式互不干擾。

例:xpath("//tr[6]/td[2]/text() | //tr[7]/td[2]/text()")

4.按屬性匹配:@

獲取所有id="test"的所有文本內(nèi)容

xpath('//*[@id="test"]//text()')

5. 匹配不包含某個(gè)屬性的標(biāo)簽 not

多用于表格中匹配中不包含表頭信息的數(shù)據(jù)

例:xpath('//table/tr[not(@class="tbhead")]')

6. 匹配包含多個(gè)屬性的標(biāo)簽: and

匹配所有的tr中不包含 tbhead 屬性 和包含 head 的tr標(biāo)簽

xpath('//table/tr[not(@class="tbhead") and @class="head"]')

7. 匹配包含不同屬性的名稱相同的標(biāo)簽: or

匹配包含class="speedbar" 或者 class="content-wrap" 的標(biāo)簽

例:xpath('//div[@class="speedbar" or @class="content-wrap"]')

8. 將對(duì)象還原為字符串:etree.tostring()

將匹配到的對(duì)象,作為etree.tostring()的參數(shù)即可, 注: 返回字符串

sObj = xml.xpath('//*[@id="test"]')[0] #使用xpath定位一個(gè)節(jié)點(diǎn)

sStr = etree.tostring(sObj)

9.按軸(Axes)匹配

9.1 選取當(dāng)前節(jié)點(diǎn)的所有子元素: child

獲取div下的tr的標(biāo)簽

例:xpath('//div[@id="testid"]/child::tr/td/text()') # 感覺(jué)這種方法雞肋, //div[@id="testid"]//tr/td 也可以實(shí)現(xiàn)

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

獲取div標(biāo)簽所有的屬性值

例: xpath('//div/attribute::*') # 感覺(jué)這種方法雞肋,//div/@* 同樣能實(shí)現(xiàn)

9.3 ancestor:父輩元素 / ancestor-or-self:父輩元素及當(dāng)前元素

獲取父輩元素的div的所有屬性值, 在不好定位的情況下,通過(guò)孩子標(biāo)簽定位,這種方法可以用

xpath('//div[@id="test"]/ancestor::div/@*')

xpath('//div[@id="test"]/ancestor-or-self::div/@*')

9.4 descendant:后代 / descendant-or-self:后代及當(dāng)前節(jié)點(diǎn)本身

獲取孩子元素的div的所有屬性值,感覺(jué)雞肋

xpath('//div[@id="test"]/descendant::div/@*')

xpath('//div[@id="test"]/descendant-or-self::div/@*')

9.5 選取當(dāng)前節(jié)點(diǎn)的所有命名空間節(jié)點(diǎn):namespace

xpath('//div[@id="test"]/namespace::*')

9.6 定位:position

和通過(guò)下標(biāo)定位一樣, 方法雞肋

xpath('//*[@id="test"]/ol/li[position()=2]/text()')

10.Xpath 函數(shù):

10.1統(tǒng)計(jì)數(shù)量:count

統(tǒng)計(jì)符合要求節(jié)點(diǎn)的數(shù)量, 注: 返回字符串

xpath('count(//tr[@info])')

10.2字符串拼接 :concat

統(tǒng)計(jì)出來(lái)的兩個(gè)內(nèi)容的字符串進(jìn)行“ + ”處理, 注: 返回字符串

xpath('concat(//li[@id="one"]/text(),//li[@id="three"]/text())')

10.3 解析當(dāng)前節(jié)點(diǎn)下的字符:string

string()直解析匹配的第一個(gè)標(biāo)簽的值, 注: 返回字符串

xpath('string(//tr)')

10.4 獲取當(dāng)前節(jié)點(diǎn)的節(jié)點(diǎn)名稱: local-name

返回當(dāng)前屬性的節(jié)點(diǎn)名稱, 注: 返回字符串

xpath('local-name(//*[@id="test"])')

10.5 以指定的字符開(kāi)頭:starts-with

starts-with定位屬性值以8開(kāi)頭的li元素

xpath('//tr[starts-with(@code,"one")]/text()')

10.6 小于:<

匹配所有tr標(biāo)簽屬性info小于200的內(nèi)容

xpath('//tr[@info<200]/text()')

11. 根據(jù)指定的文本內(nèi)容選擇

# 指定的文本內(nèi)容可以是文本內(nèi)容的部分, 也可以是全部

//div[2]/ul/li[contains(text(), "指定的文本內(nèi)容")]/span/text()

注: 以上內(nèi)容, 除標(biāo)注外, 均返回列表!!

`總注: 在平常的xpath的使用中, 前8項(xiàng)的內(nèi)容已基本夠用, 使用時(shí)也應(yīng)該使用簡(jiǎn)潔、易讀、高效的匹配式。其余兩項(xiàng)定位在較難的地方備選使用。切不可以為了追求高逼格, 刻意使用難懂難寫低效的匹配式。人生苦短…“

本人水平有限, 如有錯(cuò)誤歡迎提出指正!如有參考, 請(qǐng)注明出處!!禁止抄襲,遇抄必肛!!!

總結(jié)

以上是生活随笔為你收集整理的python xpath定位元素方法_Python爬虫杂记 - Xpath高级用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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