python爬虫——解析网页之XPath使用

在这里插入图片描述

常用规则
句法描述
tag选择具有给定标记的所有子元素。例如,spam选择指定的所有子元素spam,并spam/egg选择指定的所有孙子egg的所有命名的孩子 spam。
*选择所有子元素。例如,*/egg 选择所有名为egg的元素。
.选择当前节点。这在路径的开头非常有用,表明它是相对路径。
选择父元素
//选择当前元素下所有级别的所有子元素。例如,.//egg选择egg整个树中的所有元素
[@attrib]选择具有给定属性的所有元素。
[@attrib=‘value’]选择给定属性具有给定值的所有元素。该值不能包含引号。
[tag]选择具有子命名的所有元素 tag。只支持直系孩子。
[tag=‘text’]选择所有具有子名称tag的元素,其子文件 的完整文本内容(包括后代)等于给定的内容text。
[position]选择位于给定位置的所有元素。该位置可以是整数(1是第一个位置),表达式last() (对于最后一个位置),或相对于最后位置的位置(例如last()-1)
用法实例

演示html代码:

<html><head><title>This is a python demo page</title></head>
<body>
<p class="title"><b>The demo python introduces several python courses.</b></p>
<p class="course">Python is a wonderful general-purpose programming language.
   <a href="http://www.icourse163.org/course/BIT-268001" class="py1" id="link1">Basic Python</a>
   and <a href="http://www.icourse163.org/course/BIT-1001870001" class="py2" id="link2">Advanced Python
   </a>.</p>
</body>
</html>

导入lxml库

from lxml import html
etree = html.etree

提取所有节点

一般用 // 开头的XPath规则选取,其后跟节点名称*、html、body、div等

# 获取HTML文本
html = etree.HTML(text)
# 获取全部节点的文本
result = html.xpath('//*/text()')
print(result)

例子:

提取子节点

通过 / 或者 // 查找元素的子节点或子孙节点

# 查找p节点下a元素的文本
result = html.xpath('//p/a/text()')

结果:

在这里插入图片描述
提取父节点

用两个.来实现

# 选取a的父类节点p的文本
result = html.xpath('//a/../text()')

结果:
在这里插入图片描述
属性匹配

用@符号进行属性过滤

# 选取class为course的p节点的文本
result=html.xpath('//p[@class="course"]/text()')

结果:
在这里插入图片描述
属性获取

用@获取节点的属性

# 获取p节点的所有class属性
result = html.xpath('//p/@class')

结果:
在这里插入图片描述
属性多值匹配和多属性匹配

当某个节点有多个属性时,使用contains()函数

# contains()函数—第一个参数传入属性名称,第二个为属性值
result = html.xpath('//p/a[contains(@class,"py1")]/text()')

结果:
在这里插入图片描述

当要根据多个属性指定一个节点时,就要同时匹配多个属性,用and、or、| 等来连接。

result = html.xpath
('//p/a[contains(@class,"py1") and @id="link1" ]/text()')

参考文档:
python lxml使用官方网站
xpath规则

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值