python xpath定位元素方法_Python爬虫杂记 - Xpath高级用法
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)題。
- 上一篇: 自学huawei之路-AC6005版本升
- 下一篇: 如何用python制作九九乘法表_Pyt