python爬虫-Xpath的使用

本文详细介绍了XPath在HTML文档中的常用规则,包括选择节点、使用示例、运算符、按顺序选择以及节点轴的选择,展示了如何通过XPath查询并处理HTML结构中的内容。
摘要由CSDN通过智能技术生成

 1.Xpath的常用规则

XPath 规则描述
//选择文档中的任何位置的节点
/从根节点开始选取
.选取当前节点
..选取当前节点的父节点
@选取属性
nodeName选取节点名称为nodeName的所有节点
*通配符,匹配任何元素节点
@attribute选取名为attribute的所有属性
[@attribute]选取包含名为attribute的元素节点
[@attribute='value']选取attribute属性值为value的元素节点
[@attribute!='value']选取attribute属性值不为value的元素节点
[position()]选取文档中的第position()个节点
[last()]选取最后一个节点
[position()<X]选取文档中前X个节点
[position()>X]选取文档中第X个节点之后的所有节点
[position()=X]选取文档中第X个节点
[text()]选取带有文本的节点
[node()]选取所有类型的节点
//div[@class='classname']选取class属性为"classname"的所有div节点
//div[@id='idname']

选取id属性为"idname"的所有div节点

2.Xpath使用

1.HTML文档

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Simple HTML Example</title>
</head>
<body>
    <h1>Hello, World!</h1>
    <p>This is a simple HTML example.</p>
</body>
</html>

2.节点的选择


html = etree.HTML(text, etree.HTMLParser())
# 获取所有标签的文本内容
tags = html.xpath('//*')
# 获取所有li标签
tags_li = html.xpath('//li')
print(tags)
print(tags_li)

# 可以通过/或者//寻找该节点下面的子节点
# 获取li节点下面的所有a节点
result = html.xpath('//li/a')

# 那么知道了子孙节点,怎么寻找其所有的祖先节点呢
# 父亲节点的求取
# 首先选择中href属性为link4.html的a标签,再获取其父节点的class标签
# 可以使用parent::
result1 = html.xpath('//a[@href="link4.html"]/../@class')
print(result1)

# 属性过滤
# 在选取节点时,可以使用@符号来表示属性,比如@href表示href属性

# 可以使用text()方法来获取节点的文本内容
result2 = html.xpath('//li[@class="item-0"]/text()')
print(result2)

# 属性获取
result3 = html.xpath('//li/a/@href')  # 获取所有li节点下的所有的a节点的href属性

# 属性的多值匹配
# 使用contains()函数来匹配包含某个属性的节点
# 获取li节点下li的class属性的a节点下的内容
result4 = html.xpath('//li[contains(@class, "li"))]/a/text()')

# 多属性匹配
# 多个属性对一个节点进行确定 同时使用and进行多个节点的连接
result5 = html.xpath('//li[@class="item-0" and @name="item"]/text()')

3.运算符

运算符描述
and逻辑与运算符,用于连接两个条件,当且仅当两个条件都为true时返回true
or逻辑或运算符,用于连接两个条件,当至少一个条件为true时返回true
div除法运算符,用于执行数值除法操作
mod取模运算符,返回除法的余数
=相等运算符,用于检查两个值是否相等
!=不等运算符,用于检查两个值是否不相等
<小于运算符,检查一个值是否小于另一个值
>大于运算符,检查一个值是否大于另一个值
<=小于或等于运算符,检查一个值是否小于或等于另一个值
>=大于或等于运算符,检查一个值是否大于或等于另一个值
+加法运算符,用于执行数值相加
-减法运算符,用于执行数值相减
*乘法运算符,用于执行数值相乘

4.按序选择

# 按序进行选择
# 获取第一个li节点下的内容
result6 = html.xpath('//li[1]/text()')
# 获取最后一个li节点下的内容
result7 = html.xpath('//li[last()]/text()')
# 获取位置小于3的li节点
result8 = html.xpath('//li[position()<3]/a/text()')
# 求出倒数第三个节点
result9 = html.xpath('//li[last()-2]/a/text()')

5.节点轴的选择

# 节点轴的选择
# 节点轴的选择包含获取子元素,兄弟元素,父元素,祖先元素,属性元素等
# 获取所有li节点的祖先节点
result10 = html.xpath('//li[1]/ancestor::*')
#  获取所有li节点的祖先节点中div的祖先节点
result11 = html.xpath('//li[1]/ancestor::div')
# 获取li节点的所有属性值
result12 = html.xpath('//li[1]/attribute::*')
# 获取li节点的所有a子节点,href属性为link1.html的节点
result13 = html.xpath('//li[1]/child::a[@href="link1.html"]')
# 获取所有的span子孙节点
result14 = html.xpath('//li[1]/descendant::span')
# 获取当前节点之后的所有子节点,只选择其中的第二个节点
result15 = html.xpath('//li[1]/following::*[2]')
# 获取当前节点的所有的兄弟节点
result16 = html.xpath('//li[1]/following-sibling::*')

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值