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

Python解析网页-XPath

目录

1、什么是XPath

2、安装配置

3、XPath常用规则

4、快速入门

5、浏览器XPath工具



1.什么是XPath

   XPathXML Path Language)是一种用于在XML文档中定位和选择节点的语言。

        它是W3CWorld Wide Web Consortium)定义的一种标准查询语言,广泛用于解析和操作XML文档

2.安装配置

安装lxml

pip install lxml

使用lxml:

from lxml import etree

3.XPath常用规则

XPath使用路径表达式来描述节点的位置和关系。以下是XPath的一些常用规则:

语法说明
nodeName选取此节点的所有子节点
/从当前节点选择直接子节点
//从当前节点选择子孙节点
.当前节点
..选取当前节点的父节点
@获取属性

高级用法说明:

  • 选择特定节点类型:

    • node()匹配任何节点。

    • text()匹配文本节点。

    • element匹配元素节点。

    • @attribute匹配属性节点。

  • 属性选择:

    • [@属性名]匹配具有特定属性的节点。

    • [@属性名=值]匹配属性值等于给定值的节点。

  • 位置选择:

    • [位置]选择在指定位置的节点。

    • [last()]选择最后一个节点。

    • [position()<n]选择前 n 个位置的节点。

案例说明:

4.快速入门

在当前项目下创建一个index.html,如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body><div class="aa">hello world</div><div class="bb">hello python</div></body>
</html>

完整代码示例如下:

p = pathlib.Path("index.html")
# 网页初始化
html = etree.HTML(p.read_text(encoding="utf-8"))  # type: lxml.etree._Element
# 打印类型
# print(type(html))
# 获取指定节点
# print(html.xpath("body"))
# 获取当前节点
# print(html.xpath("."))
# 获取当前节点下的直接子节点
# print(html.xpath("./body"))
# 获取当前节点下的子孙节点
# print(html.xpath("//div"))
# 获取当前节点的父节点
# div = html.xpath("./body/div")[0]  #type: lxml.etree._Element
# print(div.xpath(".."))
# 根据属性获取
# print(html.xpath("//div[@class='aa']"))
# 获取属性的值
# print(html.xpath("//div/@class"))
# 注意:元素顺序下标从1开始
# print(html.xpath("//div[1]/@class"))
# 获取文本信息
# print(html.xpath("//div[1]/text()"))
# print(html.xpath("//div[1]")[0].text)

5.浏览器XPath工具

打开Chrome浏览器,按F12打开开发者工具,找到console输入XPath语法指令查找网页内容。

参考地址:乐百川 - 简书

示例要求:通过浏览器的XPath工具搜索上述网页中的文章标题信息。

  • 方式一:直接通过@class获取

$x("//div[@class='content  ']/a/text()")

  • 方式二:通过contains函数方式匹配@class属性的值

$x("//div[contains(@class,'content')]/a/text()")

http://www.lryc.cn/news/351388.html

相关文章:

  • Vue 3入门指南
  • Arcpy安装和环境配置
  • Swagger2 和 Swagger3 的不同
  • 基于Tensorflow+Keras的卷积神经网络(CNN)人脸识别
  • electron学习记录
  • 【若依框架】学习
  • JavaScript运算符的二义性
  • 一次搞懂常见Banner尺寸,像素标准全解析!
  • 短视频矩阵管理系统:高效运营的智能解决方案
  • ubuntu执行apt-get upgrade时卡住,无法获得锁 /var/lib/dpkg/lock-frontend,无法获取 dpkg 前端锁
  • 和程序员de 相处之道
  • 图解Java数组的内存分布
  • 前端项目使用docker编译发版和gitlab-cicd发版方式
  • 18kw 机架式液冷负载的使用方法有哪些?
  • Linux liloconfig命令教程:创建和配置LILO引导加载器(附实例详解和注意事项)
  • 大厂程序员离职,开发一个盲盒小程序2万,一周开发完!
  • 自定义 Spring AOP 切面实战(鉴权、记录日志)
  • JAVA面试题大全(九)
  • React 组件三大核心之 ref
  • json 读写 python
  • Docker快速部署Seata的TC服务以及微服务引入Seata教程
  • 我的第一个JAVA程序IDEA版
  • 轻量SEO分析报告程序网站已开心去授权
  • 本机与华为云ping不通的问题
  • FastJSON2 > FastJSON 好在何处
  • 7个常见的SQL慢查询问题及其解决方法
  • 《Rust奇幻之旅:从Java和C++开启》第1章Hello world 1/5
  • 将富文本编辑器中的H标签处理成树形结构,支持无限层级
  • 探索移动云:我的ES与Kibana之旅
  • java 线程执行原理,java线程在jvm中执行流程