目录

  • 十二、Python爬虫的Xpath简明教程(十分钟入门)
    • 12.1 Xpath表达式
    • 12.2 Xpath节点
    • 12.3 节点关系
    • 12.4 Xpath基本语法
      • 12.4.1 基本语法使用
      • 12.4.2 xpath通配符
      • 12.4.3 多路径匹配
    • 12.5 Xpath内建函数

十二、Python爬虫的Xpath简明教程(十分钟入门)

在编写爬虫程序的过程中提取信息是非常重要的环节,但是有时使用正则表达式无法匹配到想要的信息,或者书写起来非常麻烦,此时就需要用另外一种数据解析方法,也就是 Xpath 表达式。

12.1 Xpath表达式

XPath(全称:XML Path Language)即 XML 路径语言,它是一门在 XML 文档中查找信息的语言,最初被用来搜寻 XML 文档,同时它也适用于搜索 HTML 文档。因此,在爬虫过程中可以使用 XPath 来提取相应的数据。

提示:XML 是一种遵守 W3C 标椎的标记语言,类似于 HTML,但两者的设计目的是不同,XML 通常被用来传输和存储数据,而 HTML 常用来显示数据。

您可以将 Xpath 理解为在XML/HTML文档中检索、匹配元素节点的工具。

Xpath 使用路径表达式来选取XML/HTML文档中的节点或者节点集。Xpath 的功能十分强大,它除了提供了简洁的路径表达式外,还提供了100 多个内建函数,包括了处理字符串、数值、日期以及时间的函数。因此 Xpath 路径表达式几乎可以匹配所有的元素节点。

Python 第三方解析库 lxml 对 Xpath 路径表达式提供了良好的支持,能够解析 XMLHTML 文档。

12.2 Xpath节点

XPath 提供了多种类型的节点,常用的节点有:元素、属性、文本、注释以及文档节点。如下所示:

<?xml version="1.0" encoding="utf-8"?>
<website>
<site><title lang="zh-CN">website name</title><name>编程帮</name><year>2010</year><address>www.biancheng.net</address>
</site>
</website>

上面的 XML 文档中的节点例子:

<website></website> (文档节点)
<name></name> (元素节点)
lang="zh-CN" (属性节点)

12.3 节点关系

XML 文档的节点关系和 HTML 文档相似,同样有父、子、同代、先辈、后代节点。如下所示:

<?xml version="1.0" encoding="utf-8"?>
<website>
<site><title lang="zh-CN">website name</title><name>编程帮</name><year>2010</year><address>www.biancheng.net</address>
</site>
</website>

上述示例分析后,会得到如下结果

title name year address 都是 site 的子节点
site 是 title name year address  父节点
title name year address  属于同代节点
title 元素的先辈节点是 site website
website 的后代节点是 site title name year address

12.4 Xpath基本语法

12.4.1 基本语法使用

Xpath 使用路径表达式在文档中选取节点,下表列出了常用的表达式规则:

表达式 描述
node_name 选取此节点的所有子节点。
/ 绝对路径匹配,从根节点选取。
// 相对路径匹配,从所有节点中查找当前选择的节点,包括子节点和后代节点,其第一个 / 表示根节点。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性值,通过属性值选取数据。常用元素属性有 @id 、@name、@type、@class、@tittle、@href。

下面以下述代码为例讲解 Xpath 表达式的基本应用,代码如下所示:

<ul class="BookList"><li class="book1" id="book_01" href="http://www.biancheng.net/"><p class="name">c语言小白变怪兽</p><p class="model">纸质书</p><p class="price">80元</p><p class="color">红蓝色封装</p></li><li class="book2" id="book_02" href="http://www.biancheng.net/"><p class="name">Python入门到精通</p><p class="model">电子书</p><p class="price">45元</p><p class="color">蓝绿色封装</p></li>
</ul>

路径表达式以及相应的匹配内容如下:

xpath表达式://li匹配内容:
c语言小白变怪兽
纸质书
80元
红蓝色封装Python入门到精通
电子书
45元
蓝绿色封装xpath表达式://li/p[@class="name"]
匹配内容:
c语言小白变怪兽
Python入门到精通xpath表达式://li/p[@class="model"]
匹配内容:
纸质书
电子书xpath表达式://ul/li/@href
匹配内容:
http://www.biancheng.net/
http://www.biancheng.net/xpath表达式://ul/li
匹配内容:
c语言小白变怪兽
纸质书
80元
红蓝色封装Python入门到精通
电子书
45元
蓝绿色封装

注意:当需要查找某个特定的节点或者选取节点中包含的指定值时需要使用[]方括号。如下所示:

xpath表达式://ul/li[@class="book2"]/p[@class="price"]
匹配结果:45元

12.4.2 xpath通配符

Xpath 表达式的通配符可以用来选取未知的节点元素,基本语法如下:

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

示例如下:

xpath表达式://li/*匹配内容:
c语言小白变怪兽
纸质书
80元
红蓝色封装
Python入门到精通
电子书
45元
蓝绿色封装

12.4.3 多路径匹配

多个 Xpath 路径表达式可以同时使用,其语法如下:

xpath表达式1 | xpath表达式2 | xpath表达式3

示例如下:

表达式://ul/li[@class="book2"]/p[@class="price"]|//ul/li/@href匹配内容:
45元
http://www.biancheng.net/
http://www.biancheng.net/

12.5 Xpath内建函数

Xpath 提供 100 多个内建函数,这些函数给我们提供了很多便利,比如实现文本匹配、模糊匹配、以及位置匹配等,下面介绍几个常用的内建函数。

函数名称 xpath表达式示例 示例说明
text() ./text() 文本匹配,表示值取当前节点中的文本内容。
contains() //div[contains(@id,‘stu’)] 模糊匹配,表示选择 id 中包含“stu”的所有 div 节点。
last() //*[@class=‘web’][last()] 位置匹配,表示选择@class='web’的最后一个节点。
position() //*[@class=‘site’][position()<=2] 位置匹配,表示选择@class='site’的前两个节点。
start-with() “//input[start-with(@id,‘st’)]” 匹配 id 以 st 开头的元素。
ends-with() “//input[ends-with(@id,‘st’)]” 匹配 id 以 st 结尾的元素。
concat(string1,string2) concat(‘C语言中文网’,.//*[@class=‘stie’]/@href) C语言中文与标签类别属性为"stie"的 href 地址做拼接。

【Python】【进阶篇】十二、Python爬虫的Xpath简明教程(十分钟入门)相关推荐

  1. 三步解决C语言中struct字节对齐问题,Python进阶篇-struct字节对齐问题

    Python进阶篇-struct字节对齐问题 Python进阶篇-struct字节对齐问题 Python调用C的时候,会传递一些复杂的数据结构,例如结构体,这时候就会遇到各种各样字节对齐的问题.下边所 ...

  2. python进阶篇:如何进行存档!粉丝特辑!

    python进阶篇:如何进行存档!粉丝特辑! 大家好!制作不易,请求赞赏! 大家一般在制作游戏的时候,都很想制作存档这个功能,但到底怎么做呢? 下面就告诉大家! 1.1基本文件操作 为什么要学这个呢? ...

  3. python3进阶篇(二)——深析函数装饰器

    python3进阶篇(二)--深析函数装饰器 前言: 阅读这篇文章我能学到什么?   装饰器可以算python3中一个较难理解的概念了,这篇文章由浅入深带你理解函数装饰器,请阅读它. --如果您觉得这 ...

  4. Python 线程池 ThreadPoolExecutor(二) - Python零基础入门教程

    目录 一.Python 线程池前言 二.Python 线程池 ThreadPoolExecutor 常用函数 1.线程池 as_completed 函数使用 2.线程池 map 函数使用 3.线程池 ...

  5. Python爬虫之XPath基础教程:用代码抓取网页数据

    Python爬虫之XPath基础教程:用代码抓取网页数据 在网络时代,网页数据是获取信息和进行分析的最重要的来源之一.Python的爬虫技术让我们可以轻松抓取网页数据,并进行数据处理.XPath是一种 ...

  6. 十二生肖被戏称为“十二缺”,指的是这十二种动物各自都缺少一样东西

    十二生肖被戏称为"十二缺",指的是这十二种动物各自都缺少一样东西 那么这些生肖动物都各自缺少什么呢?你知道你的属相缺少的是什么东西吗?下面就一起来看看吧! [鼠无脑] 所谓兽无完兽 ...

  7. 教程 | 10分钟入门简笔画(哆啦A梦篇)

    多啦A梦主题曲 - 腾讯视频 从小就喜欢小叮当这个形象,不知道为什么后来改成了多啦A梦. 多啦A梦之歌,时常萦绕在耳旁: 心中有许多愿望,能够实现有多棒,只有哆啦a梦可以带着我实现梦想 可爱圆圆胖脸庞 ...

  8. 《正规军的Python进阶之路|Python技能树测评》

    通过<Python技能树测评>判断自己在哪个级别: Python技能树测评[https://bbs.csdn.net/skill/python] 完整的[Python]学习体系,给你正规军 ...

  9. python进阶中文版_GitHub - kaneg/interpy-zh: 《Python进阶》(Intermediate Python 中文版)...

    Python进阶 <Python进阶>是<Intermediate Python>的中文译本, 谨以此献给进击的 Python 和 Python 程序员们! 快速阅读传送门 可 ...

最新文章

  1. setting virtualbox share folder in windows7 system
  2. android adb wifi
  3. 如何正确地使用Java的@deprecated标注
  4. java模块化按需加载,JavaScript模块化之使用requireJS按需加载
  5. k-means算法学习1
  6. Windows系统判断是否为64位系统(C++)
  7. 数字几何处理作业1:编程实现三角网格上高斯曲率和平均曲率的计算编程部分
  8. javascript 无法修改 数组中对象_谈谈JavaScript中对象建立(Object)
  9. c++ 迭代器++和+1_C ++中的迭代器简介
  10. 数据库中字段的类型选择
  11. HOLOLENS的DEVICE POTAL连接和安装
  12. 基于springboot的暖暖午托管理系统
  13. Python实现 ---【简易】12306爬虫
  14. H264封装为FLV
  15. Linux user 的密码策略设定 /etc/shadow
  16. 麦子学院机器学习基础(5)-(神经网络NN))(python)
  17. win10自动修复-无限循环【通用完美】超简单解决办法
  18. win7 简易版升级旗舰版
  19. TCL雷鸟电视卸载内置应用
  20. NSArray element failed to match the Swift Array Element type错误的解决方法

热门文章

  1. 利用MP实现分页查询
  2. Windows 无法验证此设备所需的驱动程序的数字签名。某软件或硬件最近有所更改,可能安装了签名错误或损毁的文件,或者安装的文件可能是来路不明的恶意软件。 (代码 52)
  3. 改造industrial_robot_simulator给joint_states的velocity赋值,便于测试轨迹规划的速度平滑性
  4. 读后感:黑衣人---走出软件作坊:三五个人十来条枪 如何成为开发正规军(三十四)
  5. 同程旅游微服务最佳实践
  6. 最简单日柱推算法_乒乓球技术中的反手台内拧,如何练最简单?满场飞的乒乓球步法怎么练?反手拧拉两段练习法,一练就会 胖子说乒乓视频教学...
  7. matlab 超拉丁,拉丁超立方抽样 专注matlab代码下载 Downma.com 当码网
  8. 华为nova7 pro怎么升级鸿蒙,华为nova7升级到EMUI11,8大功能提升,带来更新体验
  9. 用帕斯卡定理证明圆和切线有关的问题
  10. 国内在线学习网站汇总