1.Xpath的常用规则
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.运算符
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::*')