【Xpath】基于lxml库的爬虫解析汇总

该篇文章用于记录Xpath常用的一些规则以及学习笔记


安装库

pip install lxml

导入库

from lmxl import etree

解析方式

从本地HTML文档加载到etree

import requests
from lxml import etree


parser = etree.HTMLParser()
html = etree.parse('data.html',parser)
data = html.xpath("//div[@class='title']/p")
for i in range(len(data)):
    h = data[index].get('href')
    t = data[index].text
    print(h,t)

从网页源代码加载到etree

import requests
from lxml import etree

response = requests.get(url)
tree = etree.HTML(response.text)


基础语法

以下是xpath解析过程中常见的一些语法

符号含义

表达式描述实例备注
nodename选取该节点的所有子节点xpath("//div")选取div节点的所有子元素
|xpath("//div/p|a")选取所有div元素下的p元素和a元素 / 从根节点选取 xpath("/div") 从根节点上选取div元素
//选取HTML所有的当前节点xpath("//div")选取HTML中所有的div元素
.选取当前节点xpath("./")选取当前节点下的div元素
..选取当前节点的父节点xpath("..")回到上一个元素
@选取属性xpath("//@class")选取所有的class属性

常见语法

表达式含义
//div/a[1]选取所有div元素下的第一个a子元素
//div/a[last()]选取所有div元素下的最后一个a子元素
//div/a[last()-1]选取所有div元素下的倒数第二个a子元素
//div/a[position()<3]选取所有div元素下的前两个a子元素
//div[@class]选取带class属性的所有div元素
//div[@class='name']选取带class=‘name’属性的所有div元素
//div/p[price>35.00]选取所有div元素下的p子元素,且p下的price子元素的值大于35.00
//div[@class='name']/a[2]//text()选取带class=‘name’属性的所有div元素下的第二个a子元素下的所有文本
//div/p/text()|a/li//text()选取div元素下的p子元素的文本和a子元素下的li子元素下的所有文本

模糊匹配语法

通配符含义实例含义
*匹配任何元素节点/div/*选取div元素下的所有子元素
@*匹配任何属性节点/div[@*]选取所有带属性的div元素
node()匹配任何类型的节点
//*选取文档中所有的元素

函数语法

函数用途实例含义
andxpath(‘//div[contains(@id,”a”) and contains(@id,”p”)]’)选取id值包含a和p的div节点
text()文本xpath(‘//div[contains(text(),”test”)]’)获取文本
contains获取包含xxx的元素xpath(‘//div/p[contains(@id,”test”)]’)选取div元素下包含test的id值的p标签
starts-with获取以xxx开头的元素xpath(‘//div[stars-with(@class,”test”)]’)选取div元素下以test开头的class属性的p标签

注意事项:

etree解析输出的类型为bytes,可通过etree.tostring()转换为字符串

html = etree.xpath(text)
print(etree.tostring(html,encoding='utf-8').decode("utf-8"))

参考资料:

爬虫系列 | 7、详解爬虫中Xpath的用法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

inganxu

感谢您的支持!!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值