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

歡迎訪問 生活随笔!

生活随笔

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

python

python的xpath用法_Python爬虫杂记 - Xpath高级用法

發布時間:2023/12/15 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python的xpath用法_Python爬虫杂记 - Xpath高级用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

xpath 高級用法

1. 匹配當前節點下的所有: .//

. 表示當前

// 表示當前標簽下的所有標簽

注: 要配合使用

2. 匹配某標簽的屬性值: /@屬性名稱

這里以input里的value值為例:

例:xpath(//input/@value)

3. 匹配多個路徑:|

在一個xpath中寫的多個表達式用 | 分開, 每個表達式互不干擾。

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

4.按屬性匹配:@

獲取所有id="test"的所有文本內容

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

5. 匹配不包含某個屬性的標簽 not

多用于表格中匹配中不包含表頭信息的數據

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

6. 匹配包含多個屬性的標簽: and

匹配所有的tr中不包含 tbhead 屬性 和包含 head 的tr標簽

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

7. 匹配包含不同屬性的名稱相同的標簽: or

匹配包含class="speedbar" 或者 class="content-wrap" 的標簽

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

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

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

sObj = xml.xpath('//*[@id="test"]')[0] #使用xpath定位一個節點

sStr = etree.tostring(sObj)

9.按軸(Axes)匹配

9.1 選取當前節點的所有子元素: child

獲取div下的tr的標簽

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

9.2 選取當前節點的所有屬性:attribute

獲取div標簽所有的屬性值

例: xpath('//div/attribute::*') # 感覺這種方法雞肋,//div/@* 同樣能實現

9.3 ancestor:父輩元素 / ancestor-or-self:父輩元素及當前元素

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

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

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

9.4 descendant:后代 / descendant-or-self:后代及當前節點本身

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

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

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

9.5 選取當前節點的所有命名空間節點:namespace

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

9.6 定位:position

和通過下標定位一樣, 方法雞肋

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

10.Xpath 函數:

10.1統計數量:count

統計符合要求節點的數量, 注: 返回字符串

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

10.2字符串拼接 :concat

統計出來的兩個內容的字符串進行“ + ”處理, 注: 返回字符串

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

10.3 解析當前節點下的字符:string

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

xpath('string(//tr)')

10.4 獲取當前節點的節點名稱: local-name

返回當前屬性的節點名稱, 注: 返回字符串

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

10.5 以指定的字符開頭:starts-with

starts-with定位屬性值以8開頭的li元素

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

10.6 小于:<

匹配所有tr標簽屬性info小于200的內容

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

11. 根據指定的文本內容選擇

# 指定的文本內容可以是文本內容的部分, 也可以是全部

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

注: 以上內容, 除標注外, 均返回列表!!

`總注: 在平常的xpath的使用中, 前8項的內容已基本夠用, 使用時也應該使用簡潔、易讀、高效的匹配式。其余兩項定位在較難的地方備選使用。切不可以為了追求高逼格, 刻意使用難懂難寫低效的匹配式。人生苦短...``

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

總結

以上是生活随笔為你收集整理的python的xpath用法_Python爬虫杂记 - Xpath高级用法的全部內容,希望文章能夠幫你解決所遇到的問題。

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