当前位置: 首页 > news >正文

爬虫基础学习 - Xpath

1、xpath解析原理:


1.实例化一个etree对象,将需要被解析的页面源码加载到该对象中
2.调用etree对象中的xpath方法结合xpath解析式进行标签的定位和内容的获取

2、环境安装


pip install lxml

3、Element对象:


xml结构(包括html)文档的重要部分,表示文档中的标签元素,并且提供了一些方式来进行访问和操作这些元素

1.元素名
2.元素属性
3.父子元素
4.文本内容
5.操作方法

4、etree.HTMLParser():

html解析器对象


remove_commnets(默认是false):移除html文档中的注释
remove_blank_text(默认是false):移除html文档中空白文本节点
recover(默认是false):尝试修复损坏的html文档
encoding(默认是None):指定html的编码方式

//*(匹配所有的节点)
//li(匹配所有的li标签)

通过/或者//查找子节点or子孙节点
//li/a (li标签内的a标签)子标签
获取所有的子孙节点//

5、匹配属性:

//element[@attribute='vlue']
//表示从文档的根开始搜索
element要选择元素的名称
@attribute 要删选的属性名称
value 要匹配的属性的值

父节点:..来实现 或者 parent::

文本获取:text()

属性获取:

有些节点,有多个属性,有些属性多个值,多属性使用contains

6、xpath节点的运算符


= :判断两个值是否相等
!=:判断两个值不相等
< > >= <=
逻辑运算符
and or not
字符串运算符
concat():将多个字符串连接
starts-with():检查字符串是否以指定的前缀开头
contains():检查是否包含某个字符串
substring():从字符串截取子字符串
数字运算符:
+ - * / %

按顺序选择
在标签中使用[]标识位置
last()最后一个
position()查询指定为位置的前几位

#! /usr/bin/env python3import html
from lxml import etree# //代表根目录, * 代表匹配全部节点
html_ = etree.parse('a.html', etree.HTMLParser())
result = html_.xpath('//*')
print(result)# 使用Xpath语法选取在li标签内的全部语法
result = html_.xpath('//li//a')
print(result)# //element[@attribute='vlue'] 匹配属性  匹配属性为 item-0 的 li 节点
result = html_.xpath("//li[@class='item-0']")
print(result)# 父节点的实现 ../ 或者 parent::/  //a[@href='link6.html']/../@class
result = html_.xpath("//a[@href='link6.html']/parent::*/@class")
print(result)# 读取 li 标签下的 文本属性 //li[@class='item-1']//text()
result = html_.xpath("//li[@class='item-1']/a/text()")
print(result)# 读取 a标签下的 href 链接属性
result = html_.xpath("//li/a/@href")
print(result)# 多属性使用contains, 包含根目录的属性
text = '''<li class="li item-0"><a href="link1.html">1-item</a></li><li class="li item-0" name="wangbo"><a href="link1.html">1-item</a></li><li class="li item-0"><a href="link1.html">2-item</a></li><li class="src item-1"><a href="link4.html">4-item</a></li><li class="item-1"><a href="link5.html">5-item</a></li><li class="item-0"><a href="link6.html">6-item</a></li>
'''
html_1 = etree.HTML(text)
result = html_1.xpath("//li[contains(@class,li)]/a/text()")
print(result)# 使用运算符
result = html_1.xpath("//li[contains(@class,li) and @name='wangbo']/a/text()")
print(result)# 按顺序进行查询 这里下标从 1 开始result = html_.xpath('//li[1]/a/text()')
print(result)
result = html_.xpath('//li[last()]/a/text()')
print(result)
result = html_.xpath('//li[position()<3]/a/text()')
print(result)
result = html_.xpath('//li[last() - 2]/a/text()')
print(result)
http://www.xdnf.cn/news/1375309.html

相关文章:

  • 设计模式与设计原则简介——及其设计模式学习方法
  • 优选算法-常见位运算总结
  • uniapp中 ios端 scroll-view 组件内部子元素z-index失效问题
  • 基于 Node.js 的淘宝 API 接口开发:快速构建异步数据采集服务
  • 汽车电气系统的发展演进为测试带来了哪些影响?
  • DeFi协议Lombard能突破比特币生态原生叙事困境吗?
  • 图表可视化地理趋势-Telerik WPF Chart
  • 【Day 35】Linux-主从复制的维护
  • (LeetCode 面试经典 150 题 ) 637. 二叉树的层平均值(深度优先搜索dfs)
  • 亚马逊广告关键词排名提升的五大核心策略解析
  • java简单ssm(spring+springmvc+mybatis)框架结构demo
  • 大模型重构建筑“能耗基因“:企业如何用物联中台打响能源革命?
  • 手写MyBatis第36弹:MyBatis执行流程中SQL命令类型解析
  • 登录业务——密码重置与强制修改初始密码实现思路
  • 【微信小程序】分别解决H5的跨域代理问题 和小程序正常不需要代理问题
  • Coze用户账号设置修改用户名-后端源码
  • map|math
  • 腾讯位置商业授权微信小程序路线规划
  • 【开源工具】基于Flask与Socket.IO的跨平台屏幕监控系统实战(附完整源码)
  • 前端性能优化:从指标监控到全链路落地(2024最新实战指南)
  • 论文阅读:Gorilla: Large Language Model Connected with Massive APIs
  • 深度学习入门:神经网络基础知识
  • lesson47:Linux常用软件使用指南:远程连接、远程拷贝、Vim与Nginx
  • VESA时序检测模块设计verilog实现
  • Ubuntu 24 Server 如何设置无线网络
  • imx6ull-驱动开发篇45——Linux 下 SPI 驱动框架简介
  • d435i相机读取镜头内参和相对之间的外参
  • 艾体宝新闻 | 98%好评率!KnowBe4 连续5年蝉联第一,现开放免费钓鱼测试等你解锁
  • 内网应用如何实现外网访问?外地通过公网地址访问内网服务器的设置方法
  • 遗传算法:模拟自然选择的优化智慧