python3 xpath获取节点_Python3爬虫(五)解析库的使用之XPath

本文详细介绍了Python3中使用XPath进行XML和HTML文档信息查找的方法,包括选取节点、子节点、父节点、属性匹配、文本属性、属性获取、多值匹配、多属性匹配、按序选择及节点轴选择等实战示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Infi-chu:

XPath:

全称是 XML Path Language,XML路径语言,它是一门在XML文档中和HTML文档中查找信息的语言

1.XPath常用规则

表达式    描述

nodename  选取此节点的所有子节点

/        从当前节点选取直接子节点

//       从当前节点选取子孙节点

.        选取当前节点

..       选取当前节点的父节点

@        选取属性

2.准备工作:安装 lxml 库

3.例子:

from lxml import etree

text =

'''

'''

html = etree.HTML(text) # 调用HTML类进行html初始化工作

r = etree.tostring(html) # 修复HTML代码,补全其他选项

print(r.decode('utf-8')) # 结果返回是bytes,我们将其转化成UTF-8

4.所有节点

选取所有节点:

from lxml import etree

html = etree.parse('./test.html',etree.HTMLParser())

res = html.xpath('//*') # 选取所有

print(res)

5.子节点

选取li节点的所有直接a子节点:

from lxml import etree

html = etree.parse('./test.html',etree.HTMLParser())

res = html.xpath('//li/a')

print(res)

6.父节点

使用.和..

7.属性匹配

from lxml import etree

html = etree.parse('./test.html',etree.HTMLParser())

res = html.xpath('//li[@class='ex1']')

print(res)

8.文本属性

选取li节点的内部文本,两种方法,推荐第二种

a.

from lxml import etree

html = etree.parse('./test.html',etree.HTMLParser())

res = html.xpath('//li[@class='ex1']/a/text()')

print(res)

b.推荐,信息更全

from lxml import etree

html = etree.parse('./test.html',etree.HTMLParser())

res = html.xpath('//li[@class="ex1"]//text()')

print(res)

9.属性获取

获取所有li节点下所有a节点的href属性

from lxml import etree

html = etree.parse('./test.html',etree.HTMLParser())

res = html.xpath('//li/a/@href')

print(res)

10.属性多值匹配

from lxml import etree

text =

'''

'''

html = etree.HTML(text)

res = html.xpath('//li[contains(@class,"li")]/a/text()')

print(res)

【注】

contains()中,

第一个参数传入属性名称,第二个参数传入属性值

11.多属性匹配

根据多个属性确定一个节点

from lxml import etree

text =

'''

'''

html = etree.HTML(text)

res = html.xpath('//li[@contains(@class,"li") and @name="123"]/a/text()')

print(res)

12.按序选择(多个节点)

from lxml import etree

text =

'''

'''

html = etree.HTML(text)

res = html.xpath('//li[1]/a/text()') # 第一个li

res = html.xpath('//li[last()]/a/text()') # 最后一个li

res = html.xpath('//li[position()<3]/a/text()') # 前两个li

res = html.xpath('//li[last()-2]/a/text()') # 第一个li

【注】

序号从1开始

13.节点轴选择

from lxml import etree

text =

'''

'''

html = etree.HTML(text)

res = html.xpath('//li[1]/ancestor::*') # 获取祖先节点

res = html.xpath('//li[1]/ancestor::div') # 获取祖先div节点

res = html.xpath('//li[1]/attribute::*') # 所有属性值

res = html.xpath('//li[1]/child::a[href="ex1.html"]') # 所有直接子节点

res = html.xpath('//li[1]/descendant::span') # 所有子孙节点

res = html.xpath('//li[1]/following::*[2]') # 当前节点之后的所有节点

res = html.xpath('//li[1]/following-sibling::*') # 当前节点之后的所有同级节点

【注】这些都是轴

ancestor、attribute、child、descendant、following、following-sibling

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值