Xpath 进行爬虫开发:基本概念、语法、实战

2022-10-1821:47:19编程语言入门到精通Comments899 views字数 1580阅读模式

1. 开发前的准备

前面我们介绍的 XPath 基本的语法和基本操作,下面我们通过 lxml 库,来熟悉一下 XPath 的使用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

首先,我们需要一个测试文件,文件如下,文件名为 xpath_test.xml:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

<!---  这是一个测试数据,方便我们后面进行解析-->
<div>
<ul>
<li class='item-0'><a href='a.html'>python item</a></li>
<li class='item-1'><a href='b.html'>java item</a></li>
<li class='item-inactive'><a href='c.html'><span class='bold'>C item</span></a></li>
<li class='item-1'><a href='d.html'>java item</a></li>
<li class='item-0'><a href='b.html'>java item</a></li>
<li class='item-0'><a href='b.html'>java item</a></li>
</ul>
</div>

2. 基本语法

2.1 节点之间的关系文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

  • 父节点:每个元素都有一个父亲节点;
  • 子节点:每个元素节点可以有零个,一个或者多个父亲节点;
  • 兄弟节点:相同父亲节点的节点;
  • 先辈节点:一个元素的父亲节点的父亲节点;
  • 后辈节点:一个元素的子节点的子节点。

表达式基本语法文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

表达式文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

功能简介文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

node文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

选取node下面的所有的节点文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

/node文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

斜杠是代表绝对路径,这个表达式语法的意思就是选择根上的node文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

//node文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

选择所有的node的节点,与XML的位置无关文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

选择当前节点文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

选择当前节点的父亲节点文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

node/child文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

选取node子节点的所有的child元素文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

node//child文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

选取所有后备节点的chiid信息文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

//@href文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

选取所有的href的属性文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

2.2 谓语与通配符文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

表达式文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

功能简介文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

/books/python[1]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

选取books子元素中的第一个python元素文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

/books/python[last()]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

选取books子元素中的最后一个元素文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

/books/python[position()<10]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

选取books子元素的前9个元素文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

选择当前节点文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

选择当前节点的父亲节点文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

node/child文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

选取node子节点的所有的child元素文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

node//child文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

选取所有后备节点的chiid信息文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

//@href文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

选取所有的href的属性文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

3. 开发案例

开发案例一:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

  • 从xml中查找出所有的’li’标签
from lxml import etree
emt = etree.parse('text.xml')
rst = emt.xpath('//li')

运行结果如下图所示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

Xpath 进行爬虫开发:基本概念、语法、实战文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

开发案例二:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

  • 从xml中查找出所有的’li’标签的所有class
from lxml import etree
emt = etree.parse('text.xml')
rst = emt.xpath('//li/@class')

运行结果如下图所示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

Xpath 进行爬虫开发:基本概念、语法、实战文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

开发案例三:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

  • 从xml中查找出所有的’li’标签下面的href为a.html的标签
from lxml import etree
emt = etree.parse('text.xml')
rst = emt.xpath('//li/a[@href="a.html"]')

运行结果如下图所示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

Xpath 进行爬虫开发:基本概念、语法、实战文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

4. 小结

XPath 是一种查询语言,它是通过路径来寻找相应的信息,正如它的英文名称 path 一样,通过不同种X路径,最终找到自己需要的信息。通过 XPath,我们不但可以搜索 XML,也可以搜索 HTML。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

通过案例,我们基本熟悉了 XPath 的基本使用,这也为我们后面学习 BeautifulSoup 打下了良好的基础,XPath 为我们从复杂的文档中,快速定位信息提供了良好的支持,也为我们后面处理和整理爬虫爬下来的信息奠定了根基。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28450.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/28450.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定