Python从0到100(三十三):xpath和lxml类库

avatar
作者
猴君
阅读量:2

在这里插入图片描述

1. 为什么要学习xpath和lxml

lxml是一款高性能的 Python HTML/XML 解析器,我们可以利用XPath,来快速的定位特定元素以及获取节点信息

2. 什么是xpath

XPath,全称为XML Path Language,是一种用于在XML文档中进行导航和数据提取的语言,可用来在 HTML\XML 文档中对元素和属性进行遍历

W3School官方文档:http://www.w3school.com.cn/xpath/index.asp

3. 认识xml

知识点:

  • html和xml的区别
  • xml中各个元素的的关系和属性

3.1 html和xml的区别

HTML(HyperText Markup Language)和XML(eXtensible Markup Language)都是用于描述数据的标记语言,但它们之间存在一些关键的区别:

  1. 目的

    • HTML:设计用来创建和展示网页内容。
    • XML:设计用来存储和传输数据,不定义数据的显示方式。
  2. 标准性

    • HTML:有固定的标签集,如<p><div><a>等。
    • XML:允许用户定义自己的标签,提供了极大的灵活性。
  3. 结构性

    • HTML:结构相对宽松,某些标签可以不闭合或不严格遵守嵌套规则。
    • XML:非常严格,所有标签必须正确闭合,并且必须正确嵌套。
  4. 数据表示

    • HTML:主要用于展示数据,不关注数据的结构和语义。
    • XML:强调数据的结构和语义,适合数据的存储和交换。
  5. 样式和行为

    • HTML:可以内嵌CSS和JavaScript来控制样式和行为。
    • XML:不包含样式和行为的定义,通常需要与XSL(eXtensible Stylesheet Language)或XSLT(eXtensible Stylesheet Language Transformations)结合使用来定义样式和转换数据。
  6. 错误容忍度

    • HTML:浏览器对HTML的错误相对宽容,即使某些标签使用不当,页面仍可能显示。
    • XML:对错误非常敏感,如果XML文档格式有误,通常无法被正确解析。
  7. 文档类型

    • HTML:通常不需要文档类型声明(DOCTYPE)或可以有简化的声明。
    • XML:每个XML文档都需要一个文档类型声明来指示使用的是XML。
  8. 应用范围

    • HTML:主要用于网页设计和开发。
    • XML:应用范围广泛,包括配置文件、数据交换格式、RSS feeds等。
  9. 命名空间

    • HTML:不支持命名空间。
    • XML:支持命名空间,有助于解决不同XML文档中标签名称冲突的问题。
  10. 扩展性

    • HTML:扩展性有限,受限于其固定的标签集。
    • XML:高度可扩展,用户可以根据需要创建新的标签和属性。

尽管HTML和XML在某些方面相似,但它们的设计目标和使用方式有着根本的不同。HTML专注于网页内容的展示,而XML则是一种更为通用的数据交换格式。

3.2 xml的树结构

<bookstore> <book category="COOKING">   <title lang="en">Everyday Italian</title>    <author>Giada De Laurentiis</author>    <year>2005</year>    <price>30.00</price>  </book> <book category="CHILDREN">   <title lang="en">Harry Potter</title>    <author>J K. Rowling</author>    <year>2005</year>    <price>29.99</price>  </book> <book category="WEB">   <title lang="en">Learning XML</title>    <author>Erik T. Ray</author>    <year>2003</year>    <price>39.95</price>  </book> </bookstore> 

4. xpath的节点关系

知识点:

  • 认识xpath中的节点
  • 了解xpath中节点之间的关系

4.1 xpath中的节点是什么

每个XML的标签我们都称之为节点,其中最顶层的节点称为根节点。

XPath(XML Path Language)是一种用于在XML文档中进行导航的语言,它允许你选择节点或节点集,并对它们进行操作。在XPath中,节点是文档结构的基本单元,包括以下几种类型:

  1. 元素节点:XML文档中的标签,如<book><title>等。
  2. 属性节点:元素的属性,如<book lang="English">中的lang="English"
  3. 文本节点:元素内的文本内容,如<name>John Doe</name>中的John Doe
  4. 命名空间节点:XML文档中的命名空间声明。
  5. 处理指令节点:XML文档中的处理指令,如<?xml-stylesheet type="text/xsl" href="style.xsl"?>
  6. 注释节点:XML文档中的注释部分。
  7. 根节点:XML文档的根元素,它是所有其他节点的父节点。

4.2 xpath中节点的关系

在XPath中,节点之间的关系可以描述如下:

  • 父节点:一个节点的直接上级节点。例如,在<parent><child/></parent>中,<parent><child>的父节点。
  • 子节点:一个节点的直接下级节点。在上述例子中,<child><parent>的子节点。
  • 兄弟节点:具有相同父节点的节点。例如,在<parent><child1/><child2/></parent>中,<child1><child2>互为兄弟节点。
  • 祖先节点:从当前节点向上直到根节点的所有节点。例如,在<grandparent><parent><child/></parent></grandparent>中,<grandparent><parent>都是<child>的祖先节点。
  • 后代节点:从当前节点向下直到最后一个子节点的所有节点。在上述例子中,<child><grandparent><parent>的后代节点。
  • 前序节点:包括当前节点及其所有祖先节点。
  • 后序节点:包括当前节点及其所有后代节点。
  • :XPath中用于描述节点之间关系的术语,如子轴(child axis)、父轴(parent axis)、祖先轴(ancestor axis)和后代轴(descendant axis)等。

XPath提供了丰富的路径表达式和函数,允许用户根据这些节点关系来选择和操作XML文档中的特定部分。例如,使用//可以选取文档中的所有后代节点,无论它们位于文档的哪个位置。使用/可以选取根节点的子节点,而.代表当前节点。

5. xpath中节点选择的工具

  • Chrome插件 XPath Helper
    • 下载地址:https://pan.baidu.com/s/1UM94dcwgus4SgECuoJ-Jcg 密码:337b
    • 把文件的后缀名crx改为rar,然后解压到xpath_…
    • 把解压后的文件夹拖入到已经开启开发者模式的chrome浏览器扩展程序界面
    • 重启浏览器
  • Firefox插件 XPath Checker

注意:
这些工具是用来学习xpath语法的,他们都是从elements中匹配数据,elements中的数据和url地址对应的响应不相同,所以在代码中,不建议使用这些工具进行数据的提取

6. xpath语法

知识点

  • 掌握元素路径的相关方法
  • 掌握获取获取属性的方法
  • 掌握获取文本的方法

我们将在下面的例子中使用这个 XML 文档。

<bookstore>  <book>   <title lang="eng">Harry Potter</title>   <price>29.99</price> </book>  <book>   <title lang="eng">Learning XML</title>   <price>39.95</price> </book>  </bookstore> 

6.1 选取节点

XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。

使用chrome插件选择标签时候,选中时,选中的标签会添加属性class=“xh-highlight”

下面列出了最有用的表达式:

表达式描述
nodename选中该元素。
/从根节点选取、或者是元素和元素间的过渡。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
选取当前节点的父节点。
@选取属性。
text()选取文本。

实例

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

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

xpath基础语法练习:

接下来我们听过豆瓣电影top250的页面来练习上述语法

https://movie.douban.com/top250

  • 选择所有的h1下的文本
    • //h1/text()
  • 获取所有的a标签的href
    • //a/@href
  • 获取html下的head下的title的文本
    • /html/head/title/text()
  • 获取html下的head下的link标签的href
    • /html/head/link/@href

但是当我们需要选择所有的电影名称的时候会特别费力,通过下一小节的学习,就能够解决这个问题

6.2 查找特定的节点

路径表达式结果
//title[@lang=“eng”]选择lang属性值为eng的所有title元素
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()>1]选择bookstore下面的book元素,从第二个开始选择
//book/title[text()=‘Harry Potter’]选择所有book下的title元素,仅仅选择文本为Harry Potter的title元素
/bookstore/book[price>35.00]/title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

注意点:
在xpath中,第一个元素的位置是1,最后一个元素的位置是last(),倒数第二个是last()-1

6.3 选取未知节点

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

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

实例

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

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

6.3 选取若干路径

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

实例

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

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

小结

  1. xpath的概述XPath (XML Path Language),解析查找提取信息的语言
  2. xml是和服务器交互的数据格式和json的作用一致
  3. html是浏览器解析标签数据显示给用户
  4. xpath的节点关系:根节点,子节点,父节点,兄弟节点,子节点,后代节点
  5. xpath的重点语法获取任意节点://
  6. xpath的重点语法根据属性获取节点:标签[@属性 = '值']
  7. xpath的获取节点属性值:@属性值
  8. xpath的获取节点文本值:text()

好书推荐

《AI绘画与摄影实战108招:ChatGPT+Midjourney+文心一格》
在这里插入图片描述
《AI绘画与摄影实战108招:ChatGPT Midjourney 文心一格》通过10个专题内容、108个实用技巧、120多分钟教学视频,讲解了AI绘画与摄影的相关知识,随书附赠了108集同步教学视频、50多个素材效果、260多个书中案例关键词、5200个绘画关键词等。具体内容按以下两条线展开。
一是技能线:详细讲解了ChatGPT关键词的挖掘方法、文心一格的绘画技巧、常见的AI构图与光线色调指令、Midjourney常用的绘图指令,以及AI绘图的4种方法。
二是案例线:介绍了人物摄影、动物摄影、植物摄影、建筑摄影、慢门摄影、星空摄影、航拍摄影、全景摄影、风光摄影、人文摄影、产品摄影、时尚摄影等多种热门摄影的知识。
本书由浅入深,以实战为核心,既适合摄影师、绘画爱好者、设计师、插画师、漫画家、电商商家、艺术工作者等阅读,又可作为相关院校的教材。

购买链接:https://product.dangdang.com/29723004.html

编辑推荐

高效绘图! 10章核心内容,ChatGPT结合Midjourney与文心一格,实现AI全方位作品生成!
实战案例! 50多个素材效果+108招干货技巧+260多个指令关键词 5200款绘画关键词,实操实练,秒变AI绘画高手!
视频教学! 赠送108集教学视频,扫描二维码可随时随地全程查看操作过程,让学习更轻松!

内容简介

《AI绘画与摄影实战108招:ChatGPT Midjourney 文心一格》通过10个专题内容、108个实用技巧、120多分钟教学视频,讲解了AI绘画与摄影的相关知识,随书附赠了108集同步教学视频、50多个素材效果、260多个书中案例关键词、5200个绘画关键词等。具体内容按以下两条线展开。
一是技能线:详细讲解了ChatGPT关键词的挖掘方法、文心一格的绘画技巧、常见的AI构图与光线色调指令、Midjourney常用的绘图指令,以及AI绘图的4种方法。
二是案例线:介绍了人物摄影、动物摄影、植物摄影、建筑摄影、慢门摄影、星空摄影、航拍摄影、全景摄影、风光摄影、人文摄影、产品摄影、时尚摄影等多种热门摄影的知识。
本书由浅入深,以实战为核心,既适合摄影师、绘画爱好者、设计师、插画师、漫画家、电商商家、艺术工作者等阅读,又可作为相关院校的教材。

作者简介

石头,零点画室创始人,资深摄影师,省级摄影家协会会员,毕业于湖南工艺美术学院,参与过《蓝猫总动员》的创作,2022年远赴日本、美国学习AI绘画技术,对Midjourney、Stable Diffusion有着丰富的实战经验,尤喜动漫风、中国风效果的绘制。

目  录

目 录
第1章.文案生成:ChatGPT摄影应用……………………………001
1.1 掌握关键词的挖掘技巧……002
001 使用ChatGPT进行对话 …002
002 使用特定关键词提升逻辑性 …003
003 使用关键词拓宽思维广度 …004
004 提供详细要求获取答案 …006
005 提供实例说明需求 …007
006 通过扮演角色获取答案 …008
1.2 生成AI绘画关键词……010
007 直接提问获取关键词 …011
008 通过对话不断获取关键词 …013
009 区分中、英文关键词 …016
1.3 生成AI摄影关键词……019

前  言

在数字化时代,AI技术的发展对经济产生了巨大影响。它改变了生产、制造和服务行业,提高了生产效率,降低了成本,创造了新的商业模式。随着ChatGPT、Midjourney和文心一格等AI工具的出现和发展,AI绘画技术逐渐开始创作出各种新颖、独特的艺术作品,为艺术家提供了新的创作工具和灵感,帮助艺术家突破传统的创作限制。然而,目前市场上关于AI绘图工具的资料和书籍还相对稀缺。
秉持着响应国家科技兴邦、实干兴邦的精神,我们致力于为读者提供一种全新的学习方式,使其能够更好地适应时代发展的需要。本书结合ChatGPT与Midjourney、文心一格等多种AI绘图工具,为读者提供了108个实用技巧,从关键词提取到图片的制作生成,从讲解基础绘图参数到运用参数进行实战,帮助读者全方位熟悉AI绘图工具,使读者能够在日常生活中充分利用AI技术,体验人工智能在绘画和摄影中的潜力和价值。
综合来看,本书有以下3个亮点。
(1)实战干货。本书提供了108个实用的技巧和实例,涵盖了ChatGPT的关键词提取、文心一格的操作方法、全面大量的AI绘图指令和AI绘图操作步骤等各个方面的内容。这些实战干货可以帮助读者快速掌握AI绘画和AI摄影的核心技能,并将其应用到实际工作场景中。同时,本书还针对每个技巧进行了详细的说明和演示,并辅以360多张彩插图解实例操作过程,以便读者更好地理解和应用所学知识。
(2)视频教学。本书为所有操作案例录制了同步的高清教学视频,共108集,120多分钟,读者可以用手机扫码,边看边学,边学边用。
(3)物超所值。本书介绍了3款软件,读者花1本书的钱,可以同时学习3款软件的精华,并且随书赠送了50多个素材效果、260多个书中案例关键词、5200个绘画关键词,方便读者进行实战操作练习,提高自己的绘图技能。
特别提示:
(1)版本更新:本书在编写时,是基于当时各种AI工具和软件的界面截取的实际操作图片,但本书从编辑到出版需要一段时间,这些工具的功能和界面可能会有所变动,请在阅读时,根据书中的思路举一反三进行学习。其中,ChatGPT为3.5版,Midjourney为5.2版。
(2)指令的称谓:指令又称为关键词、描述词、提示词或“咒语”,它是我们与AI模型进行交流的机器语言,书中在不同场合使用了不同的称谓,主要是为了让大家更好地理解这些行业用语,避免一叶障目。另外,很多关键词暂时没有对应的中文翻译,强行翻译为中文也会让人无法理解AI模型。
(3)指令的使用:在Midjourney中,尽量使用英文指令,对于英文单词的格式没有太多要求,如首字母大小写不用统一、单词顺序不用太讲究等。但需要注意的是,每个指令中间最好添加空格或逗号,同时所有的标点符号使用英文字体。另外,需要特别注意的是,即使是相同的指令,AI模型每次生成的文案或图片内容也会有差别。
(4)特别提醒:尽管ChatGPT具备强大的模拟人类对话的能力,但由于其是基于机器学习的模型,因此在生成的文案中仍然会存在一些语法错误,读者需根据自身需求对文案进行适当修改或再加工后方可使用。
本书由石头编著,参与编写的人员还有刘阳洋,在此表示感谢。由于作者水平有限,书中难免存在疏漏之处,恳请广大读者批评、指正。读者可扫描封底“文泉云盘”二维码获取作者联系方式,与我们沟通交流。
在这里插入图片描述

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!