当前位置: 首页 > 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()")

相关文章:

Python解析网页-XPath

目录 1、什么是XPath 2、安装配置 3、XPath常用规则 4、快速入门 5、浏览器XPath工具 1.什么是XPath XPath&#xff08;XML Path Language&#xff09;是一种用于在XML文档中定位和选择节点的语言。 它是W3C&#xff08;World Wide Web Consortium&#xff09;定义的一种标…...

Vue 3入门指南

title: Vue 3入门指南 date: 2024/5/23 19:37:34 updated: 2024/5/23 19:37:34 categories: 前端开发 tags: 框架对比环境搭建基础语法组件开发响应式系统状态管理路由配置 第1章&#xff1a;Vue 3简介 1.1 Vue.js的历史与发展 Vue.js由前谷歌工程师尤雨溪&#xff08;Eva…...

Arcpy安装和环境配置

一、前言 ArcPy 是一个以成功的arcgisscripting 模块为基础并继承了arcgisscripting 功能进而构建而成的站点包。目的是为以实用高效的方式通过 Python 执行地理数据分析、数据转换、数据管理和地图自动化创建基础。该包提供了丰富纯正的 Python 体验&#xff0c;具有代码自动…...

Swagger2 和 Swagger3 的不同

Swagger2 和 Swagger3 的不同 SpringBoot 整合 Swagger3 和 Swagger2 的主要区别如下&#xff1a; 区别一&#xff1a;引入不同的依赖 如果使用的是 Swagger 3 <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter<…...

基于Tensorflow+Keras的卷积神经网络(CNN)人脸识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 人脸识别是计算机视觉领域的一个重要研究方向&#xff0c;广泛应用于安全监控、身份验证、人机…...

electron学习记录

1.下载electron electron/electron-quick-start: Clone to try a simple Electron app (github.com) 下载实例模板 2.安装依赖 npm源改成中国镜像 npm config set registry https://registry.npmmirror.com 然后用cnpm i 来安装 npm换官方源 npm config set registry https:…...

【若依框架】学习

验证码 登录...

JavaScript运算符的二义性

在JavaScript中&#xff0c;运算符的二义性&#xff08;或称为运算符重载&#xff09;通常不是直接支持的特性&#xff0c;与某些其他语言&#xff08;如C或Python&#xff09;不同&#xff0c;这些语言允许开发者为自定义类型定义运算符的行为。然而&#xff0c;JavaScript的某…...

一次搞懂常见Banner尺寸,像素标准全解析!

在现代数字营销中&#xff0c;横幅banner广告是一种常见的形式&#xff0c;也是许多网站、博客和在线广告平台上常见的广告类型。然而&#xff0c;正确的横幅banner尺寸是至关重要的&#xff0c;因为它可以影响广告的可见性和效果。在本文中&#xff0c;我们将探讨横幅banner尺…...

短视频矩阵管理系统:高效运营的智能解决方案

在数字化时代&#xff0c;短视频已成为内容传播和品牌推广的重要渠道。随着短视频平台的不断涌现&#xff0c;如何高效管理和运营多个账号&#xff0c;成为了许多企业和个人面临的问题。短视频矩阵管理系统应运而生&#xff0c;它通过一系列智能化功能&#xff0c;为短视频的创…...

ubuntu执行apt-get upgrade时卡住,无法获得锁 /var/lib/dpkg/lock-frontend,无法获取 dpkg 前端锁

执行apt-get upgrade或apt-get dist-upgrade卡住&#xff0c;无法完成更新&#xff0c;中断后再执行更新命令出现如下提示 E: 无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 xxxx&#xff08;unattended-upgr&#xff09;持有。 N: 请注意&#xff0c;直接移除锁文件不一…...

和程序员de 相处之道

1、不要"一遇到问题就去找程序员" 通常&#xff0c;技术问题通过阅读使用说明就可以解决。比如你刚买了一个新的播放器&#xff0c;想要把它连接到你的电视&#xff0c;你只需要找到使用手册里关于如何连接接口的那一页即可。 错误信息通常会被很清晰地列出来。通过…...

图解Java数组的内存分布

我们知道&#xff0c;访问数组元素要通过数组索引&#xff0c;如&#xff1a; arr[0]如果直接访问数组&#xff0c;比如&#xff1a; int[] arr1 {1}; System.out.println(arr1);会发生什么呢&#xff1f; 打印的是一串奇怪的字符串&#xff1a;[I16b98e56。 这个字符串是J…...

前端项目使用docker编译发版和gitlab-cicd发版方式

项目目录 app/ ├── container/ │ ├── init.sh │ ├── nginx.conf.template ├── src/ ├── .gitlab-ci.yml └── deploy.sh └── Dockerfile └── Makefilecontainer目录是放nginx的配置文件&#xff0c;给nginx镜像使用 .gitlab-ci.yml和Makefile是c…...

18kw 机架式液冷负载的使用方法有哪些?

机架式液冷负载是一种高效、节能的散热设备&#xff0c;广泛应用于数据中心、服务器房等场所。它通过将冷却液循环流动&#xff0c;将热量从负载设备带走&#xff0c;实现设备的稳定运行。以下是18kw机架式液冷负载的使用方法&#xff1a; 1. 安装前准备&#xff1a;在安装机架…...

Linux liloconfig命令教程:创建和配置LILO引导加载器(附实例详解和注意事项)

Linux liloconfig命令介绍 liloconfig&#xff08;Linux Loader Configuration&#xff09;是一个用于创建新的lilo.conf文件的简单程序。在创建新的配置文件后&#xff0c;你必须执行/sbin/lilo。liloconfig使用lilo.example.conf文件作为模板。 Linux liloconfig命令适用的…...

大厂程序员离职,开发一个盲盒小程序2万,一周开发完!

大家好&#xff0c;我是程序员小孟&#xff01; 前面接了一个盲盒的小程序&#xff0c;主要的还是商城&#xff0c;盲盒的话只是其中的有一个活动。 现在的年轻人是真的会玩&#xff0c;越来越新的东西出来&#xff0c;越来越好玩的东西流行。 就像最近很火的地摊盲盒。 讲…...

自定义 Spring AOP 切面实战(鉴权、记录日志)

前言&#xff1a; 从事 Java 的小伙伴都知道 Spring AOP&#xff0c;也都知道 AOP 是面向切面编程&#xff0c;那你知道 AOP 在项目实战中怎么使用吗&#xff1f;本篇简单分享 Spring AOP 在项目中的实际使用。 AOP 知识储备传送门&#xff1a; 深入理解 Spring AOP 源码分析…...

JAVA面试题大全(九)

1、为什么要使用 spring&#xff1f; 方便解耦&#xff0c;便于开发支持aop编程声明式事务的支持方便程序的测试方便集成各种优秀的框架降低JavaEE API的使用难度 2、解释一下什么是 aop&#xff1f; AOP 是 Aspect-Oriented Programming 的缩写&#xff0c;中文翻译为“面向…...

React 组件三大核心之 ref

文章目录 用法React.createRef()useRef Hook 注意 ref 是 React 中的一个重要概念&#xff0c;它用于访问和操作 DOM 元素或者类组件实例。 在React中&#xff0c;ref 提供了一种方式&#xff0c;允许我们访问DOM节点或在render方法中创建的React元素。这对于执行DOM操作、读取…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...