【Python】爬虫解析利器:XPath

【Python】爬虫解析利器:XPath

一,常用规则

1,选取节点

表达式功能描述
nodename选取此节点的所有节点
/从当前节点选取直接子节点
//从当前节点选取选取子孙节点
.选取当前节点
选取当前节点的父节点
@选取属性

2,运算符
在这里插入图片描述
3,轴
在这里插入图片描述
4,功能函数
在这里插入图片描述
二,示例代码
引入lxml库

from lxml import etree
html = etree.HTML(text)   #初始化一个HTML文本,构造一个XPath对象
result = etree.tostring(html)   #修正补全HTML代码,结果为Bytes类型
print(result.decode('utf-8'))   # decode方法转成str

#直接读取文本文件进行解析
html = etree.parse('E:\\foo.html',etree.HTMLParser())
result = etree.tostring(html)
print(result.decode('utf-8'))

所有节点

//*
//nodename     #获取所有nodename节点

子节点

//nodename/cnodename   #获取所有nodename下的所有子节点cnodename
//nodename//dnodename  #获取所有nodename下的所有子孙节点cnodename

父节点

//nodename/..
//nodename/parent::*

节点属性匹配

//nodename[@attr='xxx']   #获取属性attr为xxxx的节点

节点属性多值匹配,某些节点的某个属性可能有多值,通过contains()函数,限制属性的值

//nodename[contains(@attr,'xxxx')]   #获取属性attr为xxxx的节点

多属性匹配节点,多个属性确定一个节点,通过’and’连接

//nodename[contains(@attr,'xxxx') and @attr2 = 'xxx'] 

文本获取

//nodename/text()          #获取nodename的文本

属性获取

/nodename/cnodename/@attr   #获取cnodename的属性attr的值

按序选择

//li[1]    #获取第一个li节点
//li[last()]   #获取最后一个li节点
//li[position()<3]    #获取第一,二节点
//li[last()-2]        #获取倒数第三个li节点

节点轴选择

//nodename/ancestor::*     #获取nodename的所有先辈节点
//nodename/ancestor::fnodename  #获取nodename的fnodename先辈节点
#ancestor比parent的选择范围更大
//nodename/attribute::*   #选取nodename下的所有属性
//nodename/child::*        #选取nodename的所有直接子节点
//nodename/descendant::*    #选取nodename的所有子孙节点,包含子节点
//nodename/following::*     #获取nodename之后的所有节点
//nodename/following-sibling::*   #获取和nodename同级的所有节点

除此之外,可以通过在浏览器中,使用查看源代码,复制XPath
在这里插入图片描述
参考:
《Python3 网络爬虫开发实战》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值