浅识XPath(熟练掌握XPath的语法)【python爬虫入门进阶】(03)

码农飞哥 2021-10-29 10:52:30
xpath 掌握 熟练 熟练掌握

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦
本文是爬虫专栏的第三篇,重点介绍网页解析神器XPath。
干货满满,建议收藏,需要用到时常看看。 小伙伴们如有问题及需要,欢迎踊跃留言哦~ ~ ~。

前言(为什么写这篇文章)

前面两篇文章我们分别介绍了爬虫程序的标准步骤,以及如何熟练的使用Requests库拉取网页数据。这一篇文章就重点介绍解析网页数据利器XPath。由于其比较重要,接下来我会用两篇文章进行介绍。

XPath介绍

XPath(XML Path Language)是一门XML文档中查找信息的语言,XPath可用来在XML(包括HTML)文档中对元素和属性进行查找以及遍历。后面会详细介绍XML和HTML文档的结构组成

XPath开发工具

既然XPath是用来解析网页的数据,就必须要能够通过一定的规则匹配到所需要爬取的数据。这里就要用到XPath的开发工具。

  1. Chrome插件 XPath Helper 密码: 166h
    下载好之后: 设置---> 更多工具--->扩展程序--->加载已解压的扩展程序
    在这里插入图片描述
    在这里插入图片描述

  2. Firefox插件 XPath Checker

XML文档介绍

在正式介绍XPath之前还是让我们来重新认识一个XML文档,XML是一种可扩展的标记语言(Extensible Markup Language)
它主要用来来传输数据,它的标签需要我们自行定义。

HTML文档(网页)

HTML文档也就是我们前面反复提到的网页,它是一种超文本标记语言,主要用来在浏览器上展示数据以及构建页面样式。它本质上跟XML类似,也是通过各种标签包装数据。不过它的标签不是我们自行定义的。

XML和HTML的区别

数据格式 描述 设计目的
XML Extensible Markup Language(可扩展标记语言) 用于传输数据,重点是数据的内容
HTML HyperText Markup Language (超文本标记语言) 用于显示数据和页面样式
HTML DOM Document Object Model for HTML (文档对象模型) 通过HTML DOM,可以访问所有HTML元素,连同它们所包含的文本和属性,可以对其中的内容进行修改和删除,同时也可以创建新的元素

XML文档示例

<?xml version="1.0" encoding="UTF-8"?>
<responseXML>
<!--注释-->
<Detail>
<CardNo>11111</CardNo>
<CardPwd lang="en">2222</CardPwd>
</Detail>
</responseXML>

其中:
<?xml version="1.0" encoding="UTF-8"?> 命名空间节点
<responseXML> 文档节点即根节点
<CardNo>1111</CardNo>是元素节点,元素节点直接包含数据,没有子节点。
lang="en" 表示属性节点。

从上面的示例就可以清晰的看出XML文档就是由一个个节点组成。在XPath中,有七种类型的节点(Node),分别是元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。最外面的节点被称为文档节点或根节点。

HTML的示例

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>HTML示例</title>
</head>
<body>
<div id="content_views" class="htmledit_views">
<p style="text-align:center;"><strong>全网ID名:<b>码农飞哥</b></strong></p>
<p style="text-align:right;"><strong>扫码加入技术交流群!</strong></span></p>
<p style="text-align:right;"><img src="https://img-blog.csdnimg.cn/5df64755954146a69087352b41640653.png"/></p>
<div style="text-align:left;"></div>
</div>
</body>
</html>

在这里插入图片描述

一个标准的HTML主要包括Head元素以及Body元素。head元素内主要包括标题<title> 等信息,body 元素内主要就页面的主内容了。用DOM树表示上面的HTML的结构就如下图所示。
在这里插入图片描述

HTML元素的关系

如上图所示,我们可以整理出HTML元素的关系。

父节点(Parent)

除了根节点之外,每个元素都有一个父节点。就像每个孩子都有一个父亲一个意思。

子节点(Children)

一个元素可以有零个,一个或者多个子节点,就像每个父亲都可能有零个,一个或者多个孩子

同胞(Sibling)

拥有相同的父节点的元素,就是拥有相同父亲的兄弟

先辈(Ancestor)

某个节点的父节点的父节点,就是祖父级别,就是爷爷辈

后代(Descendant)

某个节点的子,子的子,等等,就是孙子辈

选取节点

XPath使用路径表达式在XML文档(HTML文档)中选取节点,节点通过沿着路径或者跳跃(step)选取。下面就罗列比较常用的路径表达式。下面的示例还是以前面提到的HTML为例。这里将代码放在了一个XPath.html文件中。然后访问该文件。
在这里插入图片描述

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

实例

  1. /html 获取根节点下的 html 节点
    在这里插入图片描述
  2. //div 匹配所有的div标签以及其子节点,而不管它们在文档中的位置。
    在这里插入图片描述
  3. //div/p/strong/. 匹配strong 当前这个元素
    在这里插入图片描述
  4. //div/p/strong/.. 匹配div元素下的p元素的strong元素的父节点
    在这里插入图片描述
  5. //div/@class 匹配div节点下名为class属性。
    在这里插入图片描述

谓语

谓语用来查找某个特定的节点或者包含某个指定值的节点,被嵌在方括号中。

路径表达式 结果
//div/p[1] 选取属于div子元素的第一个p元素
//div/p[last()] 选取属于div子元素的最后一个p元素
//div/p[last()-1] 选取属于div子元素的倒数第二个p元素
//div/p[position()️] 选取最前面的两个属于div元素的子元素的p元素
//b[@class] 选取拥有class属性的b元素
//p[@style=“text-align:right;”] 选取包含属性style="text-align:right;"的p元素

通配符

XPath 通配符可用来获取未知的XML元素(包括HTML元素)

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

举例

  1. //p/strong/* 选取属于p元素的子元素strong元素的所有子元素。不包括strong元素本身。
    在这里插入图片描述
  2. //p/@* 选取属于p元素的所有属性。
    在这里插入图片描述

选取若干路径

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

路径表达式 结果
//div/p|//div/div 选取div元素的所有p和div元素
//p | //strong 选取文档中所有的p元素和strong元素

在这里插入图片描述

XPath的运算符

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

运算符 描述 实例 结果
| 计算两个节点集 //p //strong
+ 加法 6+4 10
- 减法 5-2 3
* 乘法 10*10 100
div 除法 8 div 4 2
= 等于 style=“text-align:right;” 匹配属性等于text-align:right;的style属性
< 小于
< = 小于等于
> 大于
> = 大于等于
or
and
mod 计算除法的余数 5 mod 2 1

总结

本文详细介绍了XPath的语法内容,在运用到Python抓取时要先转换为xml。

粉丝专属福利

软考资料:实用软考资料

面试题:5G 的Java高频面试题

学习资料:50G的各类学习资料

脱单秘籍:回复【脱单】

并发编程:回复【并发编程】

 验证码 可通过搜索下方 公众号 获取

版权声明
本文为[码农飞哥]所创,转载请带上原文链接,感谢
https://feige.blog.csdn.net/article/details/121003473

  1. J'ai utilisé Python pour ramper 1000 lettres d'amour pour aider mon colocataire à exprimer les fleurs de classe, mais les inverser et les inverser... C'est le secret ultime des fleurs de classe!
  2. python中列表转为矩阵后无法进行矩阵的乘法运算
  3. Python crawler Development and Learning full tutoriel 2nd Edition, banggan 100000 words [recommended Collection]
  4. Python crawler haut de gamme: microstore confus anti - décryptage
  5. La multiplication de la matrice ne peut pas être effectuée lorsque la liste est convertie en matrice en python
  6. Introduction to operators in python (Part 1)
  7. Are the dictionaries in Python ordered
  8. Introduction to dictionaries in Python
  9. List introduction in Python
  10. pandas比较两个dataframe特定数据列的数值是否相同并给出差值:使用np.where函数
  11. Python使用matplotlib绘制透明背景的可视化图像并保存透明背景的可视化结果(transparent background)
  12. Python self study notes -- basic grammar
  13. Python utilise matplotlib pour dessiner une image visuelle de l'arrière - plan transparent et enregistrer les résultats visuels de l'arrière - plan transparent
  14. Pandas compare les valeurs de deux colonnes de données spécifiques à dataframe et donne des valeurs de voyage: en utilisant la fonction np.where
  15. Comment configurer une application ASGI Django avec Postgres, nginx et uvicorn sur Ubuntu 20.04
  16. What are the advantages of Python and how to get started quickly
  17. Python self study notes -- basic data types
  18. Python code reading (Chapter 14): List Union
  19. Analyse statistique de la fonction de données des essais aléatoires Python
  20. Alien invasion project in Python application -- Aliens (Part 2)
  21. Python code reading (Chapter 14): List Union
  22. Lecture du Code Python (article 25): diviser les chaînes multilignes en listes
  23. Python self study notes -- operators
  24. Formation python - différences entre http et HTTPS
  25. Implementation of automatic timing comment function on Python CSDN platform
  26. python+tkinter+treeview子控件快捷键
  27. Raccourcis clavier pour les sous - contrôles Python + tkinter + treeview
  28. Analyse des données Python
  29. python+tkinter+treeview子控件快捷鍵
  30. Devine si je peux attraper Maotai avec la programmation python? Tout est ouvert à github
  31. À propos de pygame.display.set in Python Un petit problème avec mode ()
  32. Implementation of automatic timing comment function on Python CSDN platform
  33. python:dataframe进行iteritem遍历时如何将输出结果按照列分别输出为该列最后一行
  34. python:dataframe進行iteritem遍曆時如何將輸出結果按照列分別輸出為該列最後一行
  35. Python: comment le dataframe affiche les résultats de sortie par colonne à la dernière ligne de la colonne lors de la traversée de l'itemitem
  36. Écrivez un gadget de bureau pour votre fille préférée en python et elle dit que c'est génial!
  37. Introduction to closures in Python 3
  38. Global / nonlocal usage in Python 3
  39. Introduction to context manager in Python 3
  40. Python crawler selenium framework. You can start with these five questions | Python skill tree
  41. Common standard library random, python introductory tutorial 5 or 6 questions a day | Python skill tree
  42. It is said that Python is omnipotent. It's really good to see Liyang photography circle with Python this time
  43. 【Python 爬虫】 4、爬虫基本原理
  44. 【Python 爬蟲】 4、爬蟲基本原理
  45. 【 Python crawler】 4. Principes de base du crawler
  46. 这道python题到底应该要怎么做
  47. Que doit faire exactement ce problème Python
  48. Après l'importation des variables du module Python, les valeurs imprimées sont fixes.
  49. Nouveau singe Muzi Lee: 0 cours de formation Python de base types de hachage pour les opérations Python redis
  50. Looking at problems from a fresh perspective: analyzing selenium principle from the perspective of Python
  51. Insérez le format de date dans la base de données MySQL en python et ne l'exécutez pas.
  52. Try Python 3.10 with CONDA
  53. Répondez en python et demandez à quelqu'un de vous aider.
  54. Un simple problème de travail Python, qui ne fonctionne pas
  55. Problèmes d'écriture Python pour la boucle
  56. Comment Python exécute les commandes du programme à plusieurs reprises au lieu de quitter
  57. YYDS! Dexplot: one line of Python code to easily draw statistical charts!
  58. pandas生成的透视表如何和源数据一起保存
  59. pandas生成的透視錶如何和源數據一起保存
  60. Comment sauvegarder le tableau pivot généré par pandas avec les données sources