html提取信息变xml,网络爬虫笔记【7】 利用 XPATH 实现 XML 和 HTML 文本信息提取

2023-10-26

XML(Extensible Markup Language)指可扩展标记语言,被设计用来传输和存储数据。

HTML指的是超文本标记语言 (Hyper Text Markup Language),是WWW上用于编写网页的主要工具,详细信息请参考 http://www.w3school.com.cn/html

XML和HTML都是一种标记语言 (markup language),使用标记标签来描述数据,这些标签可用于查找和定位数据。

下面是 xml 文档的一个例子:Harry Potter29.99Learning XML39.95

父(Parent)每个元素以及属性都有一个父,上例中book 元素是 title、price 元素的父结点;

子(Children)元素节点可有零个、一个或多个子,上例中 title、price 元素都是 book 元素的子结点;

同胞(Sibling)拥有相同的父的节点,上例中title、price 为同胞结点;

先辈(Ancestor)某节点的父、父的父等等,上例中title、price 的先辈结点是bookstore。

后代(Descendant)某个节点的子,子的子,上例中bookstore的后代结点为 book、title、price。

XPath 语法

XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历。细节可以参考W3School官方文档:http://www.w3school.com.cn/xpath/index.asp

XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。

XPath 开发工具有:开源的XPath表达式编辑工具:XMLQuire(XML格式文件可用)

Chrome插件 XPath Helper

Firefox插件 XPath Checker# XPath 常用路径表达式学习

'''Harry Potter29.99Learning XML39.95'''

# 下面列出了最常用的路径表达式

'bookstore'   # 选取 bookstore 元素的所有子节点

'/bookstore'  # 选取根元素 bookstore (假如路径起始于 / ,则此路径始终代表到某元素的绝对路径)

'bookstore/book'  # 选取属于 bookstore 的子元素的所有的 book 元素

'//book'      # 选取所有的 book 元素,不管其位置在哪

'bookstore//book' # 选择 bookstore 后代元素中的所有 book 元素

'//@lang'     # 选取名为 lang 的所有属性

# 谓语

'/bookstore/book[1]'    # 选取属于 bookstore 子元素的第一个book 元素

'/bookstore/book[last()]'    # 选取属于 bookstore 子元素的最后一个 book 元素

'/bookstore/book[last()-1]'  # 选取属于 bookstore 子元素的倒数第二个 book 元素

'/bookstore/book[position 

'//title[@lang]'        # 选取所有拥有名为 lang 的属性的 title 元素

'//title[@lang="lang"]'      # 选取所有 lang 属性值为 eng 的 title 元素

'/bookstore/book[price > 35.00]'   # 选取 bookstore 下,所有 price 元素值大于 35.00 的 book 元素

'/bookstore/book[price > 35.00]/title'  # 选取 bookstore 下,所有 price 元素值大于 35.00 的 book 元素的 title 子元素

# XPath 通配符

'/bookstore/*'  # 选取 bookstore 元素的所有子元素

'//*'           # 选取文档中的所有元素

'//title[@*]'   # 选取所有带属性的 title 元素

# | 运算符,可以选择若干条路径

'//book/title | //book/price'   # 选取 book 元素的所有 title 和 price 元素

'//title | //price'             # 选取文档中的所有 title 和 price 元素

'/bookstore/book/title | //price'   # 选取 bookstore/book 下的所有 title 元素,以及文档中所有的 price 元素

lxml 库

xml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取HTML/XML 数据。lxml和正则一样,也是用 C 实现的,是一款高性能的Python HTML/XML 解析器,我们可以利用之前学习的XPath语法,来快速的定位特定元素以及节点信息。# lxml 解析 xml 文档的使用示例

from lxml import etree

text = '''first itemsecond itemthird itemfourth itemfifth item

'''

# 利用 etree.HTML,将字符串解析为 HTML 文档

html = etree.HTML(text)

# 按字符串序列化 HTML 文档

result = etree.tostring(html)

print(result.decode('utf-8'))

# 注意:lxml 会自动补全缺少的闭合标签

运行结果:first itemsecond itemthird itemfourth itemfifth item

除了直接读取字符串,lxml 还支持从文件里读取内容# lxml 读取 xml 文档 的示例

from lxml import etree

# 读取外部文件 axmldoc.xml

html = etree.parse('./axmldoc.xml')

result = etree.tostring(html,pretty_print=True)

print(result.decode('utf-8'))

XPath选取信息实践获取所有的 li 标签

获取 li 标签的所有 class 属性

继续获取 li 标签下href为 link1.html 的 a 标签

获取li 标签下的所有span 标签

获取 li 标签下的 a 标签里的所有 class

获取最后一个li 的 a 的 href

获取倒数第二个元素的内容

获取 class 值为 bold 的标签名from lxml import etree

text = '''first itemsecond itemthird itemfourth itemfifth item'''

html = etree.HTML(text)

# 获取所有的 li 标签

result = html.xpath('//li')

print(result)

print('---'*10)

# 获取 li 标签的所有 class 属性

result = html.xpath('//li/@class')

print(result)

print('---'*10)

# 继续获取 li 标签下href为 link1.html 的 a 标签

result = html.xpath('//li/a[@href="link1.html"]')

print(result)

print('---'*10)

# 获取li 标签下的所有span 标签

result = html.xpath('//li//span')

print(result)

print('---'*10)

# 获取 li 标签下的 a 标签里的所有 class

result = html.xpath('//li/a//@class')

print(result)

print('---'*10)

# 获取最后一个li 的 a 的 href

result = html.xpath('//li[last()]/a/@href')

print(result)

print('---'*10)

# 获取倒数第二个元素的内容

result = html.xpath('//li[last()-1]/a/text()')

print(result)

print('---'*10)

# 获取 class 值为 bold 的标签名

result = html.xpath('//*[@class="bold"]')

print(result[0].tag)

运行结果:

[,,,,]

------------------------------

['item-0', 'item-1', 'item-inactive', 'item-1', 'item-0']

------------------------------

[]

------------------------------

[]

------------------------------

['bold']

------------------------------

['link5.html']

------------------------------

['fourth item']

------------------------------

span

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

html提取信息变xml,网络爬虫笔记【7】 利用 XPATH 实现 XML 和 HTML 文本信息提取 的相关文章

  • matlab 三法求矩阵权重(算数平均法求权重,几何平均法求权重,特征值法求权重)

    三法求矩阵权重 例子为3 3的矩阵 可根据需要修改 算数平均法求权重 clc clear judge 1 6 9 7 8 9 6 1 9 7 8 7 7 9 1 w zeros 3 3 for i 1 3 for j 1 3 w i j j
  • C 结构体字节对齐规则

    参考 https blog csdn net xiaoxiangyuhai article details 79192781
  • mysql数据库加密密码如何解密_MySQL加密和解密实例详解

    MySQL加密和解密实例详解 数据加密 解密在安全领域非常重要 对程序员而言 在数据库中以密文方式存储用户密码对入侵者剽窃用户隐私意义重大 有多种前端加密算法可用于数据加密 解密 下面我向您推荐一种简单的数据库级别的数据加密 解密解决方案
  • merge与update区别---->你一定要看!

    merge与update区别 注 就因为这2个方法的区别还得我花了太多时间项目迟迟不能做完 但是让我解决了 学到了东西了 这是一段代码 public void updateData Object obj try tx this getSes
  • Mysql的七种join

    对于SQL的Join 在学习起来可能是比较乱的 我们知道 SQL的Join语法有很多inner的 有outer的 有left的 有时候 对于Select出来的结果集是什么样子有点不是很清楚 Coding Horror上有一篇文章 实在不清楚
  • C++技能系列 ( 5 ) - 详解函数入参/返回参使用(值传递/引用传递/指针传递/智能指针传递)

    系列文章目录 C 技能系列 Linux通信架构系列 C 高性能优化编程系列 深入理解软件架构设计系列 高级C 并发线程编程 期待动动小手 点击关注哦 当你休息的时候 一定要想到别人还在奔跑 When you rest we must thi
  • C++学习(六十九)国产先看GPU

    在CPU处理器领域 国产已经涉足了ARM MIPS甚至X86等多种指令集架构 不论自研还是授权都已经有所成就 但在GPU领域 国内厂商面对AMD NVIDIA两座大山恐怕连影都追不上 GPU市场的门槛太高 所以国内搞GPU自主研发的公司也有
  • Spring boot升级为Spring cloud配置修改(服务注册和服务发现简单案例)

    一 Spring Boot 升级Spring Cloud 1 导入Spring Cloud相关jar包 修改pom xml文件 备注 可能不同的Spring Boot版本会对应不同的Spring Cloud版本号 以下配置的Spring B
  • Android学习笔记——列表和适配器

    文章目录 一 ArrayAdapter适配器 二 下拉列表 Spinner 三 XML文件的引用 四 列表视图 listview 五 网格视图 GridView 六 自定义适配器 总结 一 ArrayAdapter适配器 适配器的角色就是将
  • 漏洞深入分析-2021

    前言 随着cve 2021 40444的披露 随机引爆了全球的网络安全 虽然最近微软发布了补丁 但是cve 2021 40444的利用却越发猖狂 0x00 0day样本分析 拿到样本的第一时间 便在自己的沙箱环境下面运行了下 并且从网上下载
  • 操作系统课设之Linux 进程间通信

    前言 课程设计开始了 实验很有意思 写博客总结学到的知识 白嫖容易 创作不易 学到东西才是真 本文原创 创作不易 转载请注明 本文链接 个人博客 https ronglin fun archives 175 PDF链接 见博客网站 CSDN
  • ESP32 开发的坑 太多了,满地都是

    jlink 死活 不能正常工作 1 无法连接到gdb 2连接上了 也无法下载程序 Warn Failed to send data to device LIBUSB ERROR TIMEOUT OpenOCD Error Sending d
  • 算法 常见数学问题

    一 最大公约数 gcd int gcd int a int b if b 0 return a else return gcd b a b 非递归形式 int gcd int a int b int tmp while b 0 tmp a
  • ubuntu20下Qt5.14.2+OpenCV(含Contrib)-4.5.0环境搭建

    Qt若要能处理图片和视频 就必须安装OpenCV 而OpenCV中很多的高级功能如人脸识别等都包含在Contrib扩展模块中 需要将Contrib与OpenCV一起联合编译 目前所用这两个版本都是4 5 0版 一 下载OpenCV Open
  • hd630 黑苹果_黑苹果(hackintosh)技术整合指南

    更新 2019 5 15日 优化结构 去除了扩展 把他们合并到正文 把无关的东西扔后面 2019 4 10号 链接了本站大神翟海生的纯净安装教程 一位简书大佬解释和配置config文件的文章 非常详细 十分推荐 第一 常用的论坛 工具网站介
  • three.js加载管理器LoadingManager实现对纹理图片的加载监听

    一 加载管理器LoadingManager使用介绍 LoadingManager是three js中的加载管理器 用于监控和管理加载资源的过程 通过使用LoadingManager 我们可以在应用程序中方便地加载各种类型的数据 例如模型 纹
  • POJ 1811 Prime Test —— Miller_Rabin+Pollard_Rho

    http poj org problem id 1811 题意 给定一个64位整数 问是否为质数 如果不是 则输出其最小因子 分析 Miller Rabin素数判定 若不是 则Pollard Rho分解质因子 找到最小即可 Miller r
  • 【对比Java学Kotlin】作用域函数

    什么是作用域函数 首先 落脚点是函数 什么的函数呢 能在某个上下文对象 可能是普通对象 也可能是个 Unit 的作用域内执行代码的函数 这里的作用域和 Java 的作用域有所不同 Java 的作用域更多的是指一对闭合的 的内部区域 void
  • Oracle数据库环境变量配置+修改数据库密码

    1 设置环境变量 必须设置环境变量才可以用CMD命令访问Oracle数据库 1 1 首先找到你Oracle安装位置路径 C app Administrator product 11 2 0 dbhome 1 1 2 设置环境变量 1 2 1

随机推荐

  • RAM汇编指令的简单介绍

    一些常见的概念 指令和伪指令 指令和伪指令的本质区别 指令在编译后会生成机器码由CPU去执行 而伪指令只是指导编译的过程 本身不会生成机器码 伪指令是编译器提供的 在编译的过程中 编译器自己会去对伪指令做相应的处理 什么是汇编指令 汇编指令
  • mysql installer no packages found 解决办法

    mysql installer no packages found 解决办法 方法源于https stackoverflow com questions 65772865 mysql installer did not find packa
  • 网络层协议和IP数据包的格式(详解)

    1 网络层的功能 定义了基于IP协议的逻辑地址 就是ip地址 连接不同的媒介类型 选择数据通过网络的最佳路径 完成逻辑地址寻址 2 IP数据包格式 版本号 Version 4bit 指IP协议版本 并且通信双方使用的版本必须保持一致 目前我
  • chatGPT是什么?chatGPT有哪些应用场景

    ChatGPT是一个通过大规模预训练语言模型实现的对话生成系统 它是由OpenAI研发的 这个系统的核心技术是基于深度学习的自然语言处理技术 GPT GenerativePre trainedTransformer 模型 GPT模型采用了T
  • uni-app中的#ifdef #ifndef #endif的用处,可以处理兼容多端平台

    1 ifdef ifndef endif三者的意思 ifdef 仅在某个平台上使用 ifndef 在除了这个平台的其他平台上使用 非此平台使用 endif 结束条件编译 2 平台标识的意思 标识 平台 APP PLUS 5 App MP 微
  • 关于vmware虚拟机的deepin没有网络问题

    首先我的vmware虚拟机的deepin是采用NAT模式 配置NAT网络 配置VMnet8 在deepin中手动添加有线连接 添加设置 保存退出 用有线连接2即可
  • 微信小程序实践——实验2天气查询小程序

    一 申请和风天气的API密钥 登录和风天气 创建成功后可得到自己的key 二 域名的配置 每一个小程序在与指定域名地址进行网络通信前都必须将该域名地址添加到管理员后台白名单中 需对域名地址https devapi qweather com进
  • Search for a Range(LeetCode)

    Given an array of integers nums sorted in ascending order find the starting and ending position of a given target value
  • 【python】爬虫篇:python使用psycopg2批量插入数据(三)

    本人菜鸡 有什么错误 还望大家批评指出 最近在更新python的爬虫系列 皿 Hiahiahia 该系列暂时总共有3篇文章 连接如下 python 爬虫篇 python连接postgresql 一 https blog csdn net l
  • 查看系统使用率命令 vmstat 输出详解!

    使用效果
  • 凸包问题的五种解法

    原文 http blog csdn net yangkunpengd article details 51336453 凸包问题的五种解法 前言 首先 什么是凸包 说凸包首先要说凸性的定义 简单点说就是平面邻域中任意两点所在的线段上的点都在
  • LR(0)文法分析(通过例题穿插讲解)

    目录 LR 0 文法的字面含义 LR 0 分析表的构造 写在最后 LR 0 文法的字面含义 LR 0 分析法是其他LR分析法构造的基础 L表示从左往右扫描 R表示反向构造出一个最右推导 k表示向前看k个字符 缺省为1 在学习LR 0 分析时
  • Linux驱动框架与LED实战

    目录 驱动框架 相关文件 案例分析 LED驱动框架源码 led class c led class attrs leds class class结构体 led classdev register 某一类的设备创建 led classdev结
  • QT获取显示当前时间和日期

    获取当前时间和日期 QT中获取时间和日期的主要是 QTime QDate 和 QDateTime 这三个类 QTime 类 通过 QTime 类中提供的时间相关的方法 可以获取到当前系统时间 时 分 秒 毫秒 需要注意的是 计时的准确性由底
  • QWidget/QDialog主窗体设置边框圆角

    1 问题 QT中窗体QWidget和QDialog为容器 不能对窗体进行边框圆角样式改变 只能通过绘图QPainter 2 设置无上边框选项窗口 this gt setWindowFlags Qt Widget Qt FramelessWi
  • CSS学习笔记八——宽高自适应

    宽高自适应 一 宽度自适应 二 高度自适应 三 浮动元素的高度自适应 四 窗口自适应 五 结语 一 宽度自适应 不写宽度或者写 width auto就表示宽度自适应 可用于横栏或导航栏 与 width 100 不同 设为100 已经固定了宽
  • MySQL之无限级分类表设计

    首先查找一下goods cates表和table goods brands数据表 分别使用命令 root localhost test gt show columns from goods cates root localhost test
  • 【Spring源码】一:整体流程

    总流程 12 个方法 Prepare this context for refreshing prepareRefresh Tell the subclass to refresh the internal bean factory Con
  • 与焦虑同行,话技术领导者成长

    解码职场焦虑 系列直播第二期来啦 技术领导者在职场跃迁中 会因为各种内外因素的变化而产生焦虑 困惑 烦躁等情绪 我们该怎样与负面情绪共处 认识到局限 接纳并不完美的自己 从而稳步前行 技术Leader成长路上会面对哪些情绪挑战 高压和忙碌状
  • html提取信息变xml,网络爬虫笔记【7】 利用 XPATH 实现 XML 和 HTML 文本信息提取

    XML Extensible Markup Language 指可扩展标记语言 被设计用来传输和存储数据 HTML指的是超文本标记语言 Hyper Text Markup Language 是WWW上用于编写网页的主要工具 详细信息请参考