爬虫之Xpath解析
2023-02-26 10:20:40 时间
xpath解析
-
html标签结构
- 是一个树状的结构
-
xpath解析原理
(福利推荐:阿里云、腾讯云、华为云服务器最新限时优惠活动,云服务器1核2G仅88元/年、2核4G仅698元/3年,点击这里立即抢购>>>)
-
实例化一个etree对象,且将即将被解析的数据加载到该对象中
-
解析本地存储的html文档:
- etree.parse(‘fileName’)
-
解析网上爬取的html数据:
- etree.HTML(page_text)
-
- 使用etree对象中的xpath方法结合着不同的xpath表达式实现标签定位和数据提取
-
xpath表达式
-
标签定位
- 最左侧的/:必须要从根标签开始逐层的定位目标标签
- 非最最侧的/:表示一个层级
- 最左侧的//:可以从任意位置定义目标标签
- 非最左侧的//:表示多个层级
- 属性定位://tagName[@attrName=’value’]
- 索引定位://tagName[index],index索引是从1开始
-
模糊匹配:
- //div[contains(@class, “ng”)] 定位到class属性值中包含ng的div标签
- //div[starts-with(@class, “ta”)] 定位到class属性值中是以ta开头的div标签
-
数据提取
-
取标签中的数据
- /text():直系文本内容
- //text():所有的文本内容
-
取属性的数据
-
from lxml import etree
In [35]:
tree = etree.parse('./test.html?userCode=wrvvs1rm')#将本地存储的html文档进行解析 tree
Out[35]:
<lxml.etree._ElementTree at 0x10af51508>
In [38]:
tree.xpath('/html/head')#从根标签开始定位head标签 tree.xpath('//head') #将html文档中所有的head标签定位到
Out[38]:
[]
In [40]:
tree.xpath('/html//meta')
Out[40]:
[<Element meta at 0x10d9d2e88>]
In [43]:
#定位class为song的div标签 tree.xpath('//div[@class="song"]')
Out[43]:
[<Element div at 0x10d9cca88>]
In [49]:
tree.xpath('//li[1]')
Out[49]:
[<Element li at 0x10dcb8708>]
In [52]:
tree.xpath('//a[@id="feng"]/text()')
Out[52]:
['凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘']
In [54]:
tree.xpath('//div[@class="song"]//text()')
Out[54]:
['ntt', '李清照', 'ntt', '王安石', 'ntt', '苏轼', 'ntt', '柳宗元', 'ntt', 'nttt', 'this is span', 'ntt宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱', 'ntt', '总为浮云能蔽日,长安不见使人愁', 'ntt', 'nt']
In [56]:
tree.xpath('//a[@id="feng"][email protected]')
Out[56]:
['http://www.haha.com']
你还在原价购买阿里云、腾讯云、华为云、天翼云产品?那就亏大啦!现在申请成为四大品牌云厂商VIP用户,可以3折优惠价购买云服务器等云产品,并且可享四大云服务商产品终身VIP优惠价,还等什么?赶紧点击下面对应链接免费申请VIP客户吧:
相关文章
- Q&A:JUC
- 基于selenium的UI自动化实践
- Ubuntu Server利用Clash实现git代理 - wuuconix's blog
- 将恶意ip加入ssh黑名单的自动化shell脚本实现 2.0 - wuuconix's blog
- 论一种模块化的 Minecraft Minigame 游戏架构模型
- 学习周刊-总第87期-2022年第52周
- 源计划-方舟:首页卡片
- 大学STEM教育的技能水平和收获
- MassTransit | 基于StateMachine实现Saga编排式分布式事务
- 组长指出了我使用react常犯的错误
- 用TodoList实例告诉你怎么在项目中使用TypeScript
- 新的一年,从手写mini react开始
- 前端next工程自动化部署到你的宝塔
- ref和reactive你必须要知道的使用场景和差异
- 通过8个常用hook手把手教你封装hooks
- 重装操作系统经历之谈
- Spark报错记录:Overloaded method foreachBatch with alternatives
- 关于Presto对lzo压缩的表查询使用记录
- Linux重新执行某个历史命令
- Ubuntu安装Anaconda及注意事项