iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中Lxml与Xpath解析库如何使用
  • 870
分享到

Python中Lxml与Xpath解析库如何使用

2023-06-15 19:06:40 870人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

本篇文章给大家分享的是有关python中Lxml与Xpath解析库如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、xpath 概念、xpath节点、xpath语法、x

本篇文章给大家分享的是有关python中Lxml与Xpath解析库如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一、xpath 概念、xpath节点、xpath语法、xpath轴、xpath运算符

二、lxml的安装、lxml的使用、lxml案例

一、xpath

1.xpath概念

XPath 是一门在 XML 文档中查找信息的语言。XPath 使用路径表达式在 XML 文档中进行导航 。XPath 包含一个标准函数库 。XPath  是 XSLT 中的主要元素 。XPath 是一个 W3C 标准 。

2.xpath节点

xpath有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。

节点关系:父、子、兄弟、先辈、后辈。

3.xpath语法

xpath语法在W3c网站上有详细的介绍,这里截取部分知识,供大家学习。

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。下面列出了最有用的路径表达式:

表达式描述
nodename选取此节点的所有子节点。
/从根节点选取。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
..选取当前节点的父节点。
@选取属性。

在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

路径表达式结果
bookstore选取 bookstore 元素的所有子节点。
/bookstore选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
bookstore/book选取属于 bookstore 的子元素的所有 book 元素。
//book选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang选取名为 lang 的所有属性。

谓语(Predicates)

谓语用来查找某个特定的节点或者包含某个指定的值的节点。

谓语被嵌在方括号中。

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

路径表达式结果
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3]选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='eng']选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00]选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于  35.00。

选取未知节点

XPath 通配符可用来选取未知的 XML 元素。

通配符描述
*匹配任何元素节点。
@*匹配任何属性节点。
node()匹配任何类型的节点。

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式结果
/bookstore/*选取 bookstore 元素的所有子元素。
//*选取文档中的所有元素。
//title[@*]选取所有带有属性的 title 元素。

选取若干路径

通过在路径表达式中使用"|"运算符,您可以选取若干个路径。

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式结果
//book/title | //book/price选取 book 元素的所有 title 和 price 元素。
//title | //price选取文档中的所有 title 和 price 元素。
/bookstore/book/title | //price选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price  元素。

xpath 轴

轴可定义相对于当前节点的节点集。

轴名称结果
ancestor选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
attribute选取当前节点的所有属性。
child选取当前节点的所有子元素。
descendant选取当前节点的所有后代元素(子、孙等)。
descendant-or-self选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following选取文档中当前节点的结束标签之后的所有节点。
namespace选取当前节点的所有命名空间节点。
parent选取当前节点的父节点。
preceding选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling选取当前节点之前的所有同级节点。
self选取当前节点。

5.xpath运算符

下面列出了可用在 XPath 表达式中的运算符:

运算符描述实例返回值
|计算两个节点集//book | //cd返回所有拥有 book 和 cd 元素的节点集
+加法6 + 410
-减法6 - 42
*乘法6 * 424
div除法8 div 42
=等于price=9.80如果 price 是 9.80,则返回 true。如果 price 是 9.90,则返回 false。
!=不等于price!=9.80如果 price 是 9.90,则返回 true。如果 price 是 9.80,则返回 false。
<小于price<9.80如果 price 是 9.00,则返回 true。如果 price 是 9.90,则返回 false。
<=小于或等于price<=9.80如果 price 是 9.00,则返回 true。如果 price 是 9.90,则返回 false。
>大于price>9.80如果 price 是 9.90,则返回 true。如果 price 是 9.80,则返回 false。
>=大于或等于price>=9.80如果 price 是 9.90,则返回 true。如果 price 是 9.70,则返回 false。
orprice=9.80 or price=9.70如果 price 是 9.80,则返回 true。如果 price 是 9.50,则返回 false。
andprice>9.00 and price<9.90如果 price 是 9.80,则返回 true。如果 price 是 8.50,则返回 false。
mod计算除法的余数5 mod 21

好了,xpath的内容就这么多了。接下来我们要介绍一个神器lxml,他的速度很快,曾经一直是我使用beautifulsoup时最钟爱的解析器,没有之一,因为他的速度的确比其他的html.parser  和HTML5lib快了许多。

二、lxml

1.lxml安装

lxml 是一个xpath格式解析模块,安装很方便,直接pip install lxml 或者easy_install lxml即可。

lxml 使用

lxml提供了两种解析网页的方式,一种是你解析自己写的离线网页时,另一种 则是解析线上网页。

导入包:

from lxml import  etree

解析离线网页:

html=etree.parse('xx.html',etree.HTMLParser()) aa=html.xpath('//*[@id="s_xmancard_news"]/div/div[2]/div/div[1]/h3/a[1]/@href') print(aa)

解析在线网页:

from lxml import etree import requests rep=requests.get('https://www.baidu.com') html=etree.HTML(rep.text) aa=html.xpath('//*[@id="s_xmancard_news"]/div/div[2]/div/div[1]/h3/a[1]/@href') print(aa)

那么我们怎么获取这些标签和标签对应的属性值了,很简单,首先获取标签只需你这样做:

Python中Lxml与Xpath解析库如何使用

然后我们可以,比方说,你要获取a标签内的文本和它的属性href所对应的值,有两种方法,

表达式内获取

aa=html.xpath('//*[@id="s_xmancard_news"]/div/div[2]/div/div[1]/h3/a[1]/text()')  ab=html.xpath('//*[@id="s_xmancard_news"]/div/div[2]/div/div[1]/h3/a[1]/@href')

表达式外获取

aa=html.xpath('//*[@id="s_xmancard_news"]/div/div[2]/div/div[1]/h3/a[1]')  aa.text  aa.attrib.get('href')

这样就完成了获取,怎么样,是不是很简单了,哈哈哈。

下面再来lxml的解析规则:

表达式描述
nodename选取此节点的所有子节点
/从当前节点选取直接子节点
//从当前节点选取子孙节点
.选取当前节点
..选取当前节点的父节点
@选取属性
html = lxml.etree.HTML(text) #使用text构造一个XPath解析对象,etree模块可以自动修正HTML文本 html = lxml.etree.parse('./ex.html',etree.HTMLParser()) #直接读取文本进行解析 from lxml import etree result = html.xpath('//*') #选取所有节点 result = html.xpath('//li') #获取所有li节点 result = html.xpath('//li/a') #获取所有li节点的直接a子节点 result = html.xpath('//li//a') #获取所有li节点的所有a子孙节点 result = html.xpath('//a[@href="link.html"]/../@class') #获取所有href属性为link.html的a节点的父节点的class属性 result = html.xpath('//li[@class="ni"]') #获取所有class属性为ni的li节点 result = html.xpath('//li/text()') #获取所有li节点的文本 result = html.xpath('//li/a/@href') #获取所有li节点的a节点的href属性 result = html.xpath('//li[contains(@class,"li")]/a/text()) #当li的class属性有多个值时,需用contains函数完成匹配 result = html.xpath('//li[contains(@class,"li") and @name="item"]/a/text()') #多属性匹配 result = html.xpath('//li[1]/a/text()') result = html.xpath('//li[last()]/a/text()') result = html.xpath('//li[position()<3]/a/text()') result = html.xpath('//li[last()-2]/a/text()') #按序选择,中括号内为XPath提供的函数 result = html.xpath('//li[1]/ancestor::*') #获取祖先节点 result = html.xpath('//li[1]/ancestor::div') result = html.xpath('//li[1]/attribute::*') #获取属性值 result = html.xpath('//li[1]/child::a[@href="link1.html"]') #获取直接子节点 result = html.xpath('//li[1]/descendant::span') #获取所有子孙节点 result = html.xpath('//li[1]/following::*[2]') #获取当前节点之后的所有节点的第二个 result = html.xpath('//li[1]/following-sibling::*') #获取后续所有同级节点

3.lxml案例

Python中Lxml与Xpath解析库如何使用

以上就是Python中Lxml与Xpath解析库如何使用,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网Python频道。

--结束END--

本文标题: Python中Lxml与Xpath解析库如何使用

本文链接: https://www.lsjlt.com/news/281341.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python中Lxml与Xpath解析库如何使用
    本篇文章给大家分享的是有关Python中Lxml与Xpath解析库如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、xpath 概念、xpath节点、xpath语法、x...
    99+
    2023-06-15
  • python中requests库+xpath+lxml简单使用
    目录安装简单使用1.简单访问一个url:2.带参数访问url4.requests的一些常用方法和主要参数5.requests.Response对象的属性说明xpath简介lxml简介...
    99+
    2024-04-02
  • Python使用lxml解析xpath爬取konachan
    要使用lxml解析xpath来爬取konachan,你可以按照以下步骤进行:1. 首先,确保你已经安装了lxml库。你可以使用以下命...
    99+
    2023-08-22
    Python
  • python怎么爬虫lxml库解析xpath网页
    这篇文章主要介绍“python怎么爬虫lxml库解析xpath网页”,在日常操作中,相信很多人在python怎么爬虫lxml库解析xpath网页问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python怎么爬...
    99+
    2023-06-30
  • python爬虫lxml库解析xpath网页过程示例
    目录前言(一)xpath是什么(二)xpath的基本语法 路径查询。(三) lxml库(四)lxml库的使用 导入lxml.etree(五)实例演示前言 在我们抓取网页内容的时候,通...
    99+
    2024-04-02
  • python 网页解析器掌握第三方 lxml 扩展库与 xpath 的使用方法
    今天说的则是使用另外一种扩展库 lxml 来对网页完成解析。同样的,lxml 库能完成对 html、xml 格式的文件解析,并且能够用来解析大型的文档、解析速度也是相对比较快的。 要...
    99+
    2024-04-02
  • python网页解析器掌握第三方lxml扩展库与xpath的使用示例
    这篇文章将为大家详细讲解有关python网页解析器掌握第三方lxml扩展库与xpath的使用示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、导入 lxml 扩展库、并创建对象# -*-&n...
    99+
    2023-06-14
  • Python 文档解析lxml库的使用详解
    目录1.lxml库简介2.lxml库方法介绍3.代码实例1.lxml库简介 lxml 是 Python 常用的文档解析库,能够高效地解析 HTML/XML 文档,常用于 Python...
    99+
    2024-04-02
  • 如何使用xpath解析html字符串
    一分耕耘,一分收获!既然打开了这篇文章《如何使用xpath解析html字符串》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬...
    99+
    2024-04-04
  • Python使用XPath解析HTML的方法详解
    目录引言XPath语法XPath方法Python中使用XPath解析HTML文档XPath表达式示例选择节点谓词运算符示例代码总结引言 XPath是一种用于选择XML文档中节点的语言...
    99+
    2023-05-19
    Python XPath解析HTML Python 解析HTML Python XPath
  • dom4j中如何使用XPath
    这篇文章主要介绍了dom4j中如何使用XPath,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。如下所示:package com.w...
    99+
    2024-04-02
  • python如何使用XPath解析数据爬取起点小说网数据
    小编给大家分享一下python如何使用XPath解析数据爬取起点小说网数据,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python的数据类型有哪些python的...
    99+
    2023-06-14
  • Python实战使用XPath采集数据示例解析
    目录lxml发送请求明确需求:解析数据保存数据lxml lxml 是 Python 的一个库,用于解析和呈现 XML 和 HTML。它支持多种内置和第三方 XML 和 HTML 标记...
    99+
    2023-05-16
    Python XPath采集数据 Python XPath
  • 如何在python中安装与使用selenium库
    如何在python中安装与使用selenium库?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。第一步:python中安装selenium库和其他所有Python库一样,se...
    99+
    2023-06-15
  • python中partial库的使用方法解析
    源码解释: class partial: """New function with partial application of the given arguments ...
    99+
    2024-04-02
  • python使用XPath解析数据爬取起点小说网数据
    目录1. xpath 的介绍优点:安装lxml库XML的树形结构:选取节点的表达式举例:2. 爬取起点小说网在浏览器中获取书名和作者测试使用xpath获取起点小说网的数据1. xpa...
    99+
    2024-04-02
  • python中requests库安装与使用详解
    目录前言1、Requests介绍2、requests库的安装3、requests库常用的方法4、response对象的常用属性5、使用requests发送get请求5.1  ...
    99+
    2024-04-02
  • Python如何使用Beautiful Soup(BS4)库解析HTML和XML
    一、Beautiful Soup概述:Beautiful Soup支持从HTML或XML文件中提取数据的Python库;它支持Python标准库中的HTML解析器,还支持一些第三方的解析器lxml。Beautiful Soup自动将输入文档...
    99+
    2023-05-14
    html Python xml
  • Python中如何使用ChatOps库
    Python中如何使用ChatOps库,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。ChatOps 是基于会话导向而进行的开发。其思路是你可以编写能够对聊天窗口中的某些输入...
    99+
    2023-06-16
  • Python中如何使用Itertools库
    这篇文章将为大家详细讲解有关Python中如何使用Itertools库,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、概念简介1. 什么是迭代器迭代器是由__next__方法组成的对象。它...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作