使用 Xpath 进行爬虫开发

Xpath( XML Path Language, XML路径语言),是一种在 XML 数据中查找信息的语言,现在,我们也可以使用它在 HTML 中查找需要的信息。

既然谈到 Xpath 是一门语言,当然它就会有自己的一些特定的语法。我们这里罗列一些经常使用的语法,熟悉下面的基本语法之后,就能满足我们日常的爬虫开发所用。

本小节主要内容:

Xpath的基本概念

Xpath的基本语法

Xpath实战

学习目标:

熟练掌握常用的 Xpath 的基本操作

1. 开发前的准备

前面我们介绍的 XPath 基本的语法和基本操作,下面我们通过 lxml 库,来熟悉一下 XPath 的使用。

首先,我们需要一个测试文件,文件如下,文件名为 xpath_test.xml:

python itemjava itemC itemjava itemjava itemjava item

2. 基本语法

2.1 节点之间的关系

父节点:每个元素都有一个父亲节点;

子节点:每个元素节点可以有零个,一个或者多个父亲节点;

兄弟节点:相同父亲节点的节点;

先辈节点:一个元素的父亲节点的父亲节点;

后辈节点:一个元素的子节点的子节点。

表达式基本语法

表达式

功能简介

node

选取node下面的所有的节点

/node

斜杠是代表绝对路径,这个表达式语法的意思就是选择根上的node

//node

选择所有的node的节点,与XML的位置无关

.

选择当前节点

选择当前节点的父亲节点

node/child

选取node子节点的所有的child元素

node//child

选取所有后备节点的chiid信息

//@href

选取所有的href的属性

2.2 谓语与通配符

表达式

功能简介

/books/python[1]

选取books子元素中的第一个python元素

/books/python[last()]

选取books子元素中的最后一个元素

/books/python[position()<10]

选取books子元素的前9个元素

.

选择当前节点

选择当前节点的父亲节点

node/child

选取node子节点的所有的child元素

node//child

选取所有后备节点的chiid信息

//@href

选取所有的href的属性

3. 开发案例

开发案例一:

从xml中查找出所有的’li’标签

from lxml import etree

emt = etree.parse('text.xml')

rst = emt.xpath('//li')

运行结果如下图所示:

开发案例二:

从xml中查找出所有的’li’标签的所有class

from lxml import etree

emt = etree.parse('text.xml')

rst = emt.xpath('//li/@class')

运行结果如下图所示:

开发案例三:

从xml中查找出所有的’li’标签下面的href为a.html的标签

from lxml import etree

emt = etree.parse('text.xml')

rst = emt.xpath('//li/a[@href="a.html"]')

运行结果如下图所示:

4. 小结

XPath 是一种查询语言,它是通过路径来寻找相应的信息,正如它的英文名称 path 一样,通过不同种X路径,最终找到自己需要的信息。通过 XPath,我们不但可以搜索 XML,也可以搜索 HTML。

通过案例,我们基本熟悉了 XPath 的基本使用,这也为我们后面学习 BeautifulSoup 打下了良好的基础,XPath 为我们从复杂的文档中,快速定位信息提供了良好的支持,也为我们后面处理和整理爬虫爬下来的信息奠定了根基。

原文地址:https://blog.csdn.net/q7825103/article/details/105379906

文章来源与用户投稿或网络采集,如果您是本文的作者,发现版权或转载方式问题请右侧邮箱联系管理员。

670人推荐

python爬虫xpath教程_使用 Xpath 进行爬虫开发相关推荐

  1. python新手入门教程思路-Python新手入门教程_教你怎么用Python做数据分析

    Python新手入门教程_教你怎么用Python做数据分析 跟大家讲了这么多期的Python教程,有小伙伴在学Python新手教程的时候说学Python比较复杂的地方就是资料太多了,比较复杂.很多网上 ...

  2. python大神教程_大神python教程415集全套,拿走不谢

    大神的教程 由北京尚学堂高淇老师亲自录制,2019Python自学教程全新升级为<Python+数据分析+机器学习>能力逐级提升,打造技能更全面的全栈工程师. Python作为一种编程语言 ...

  3. Python爬虫学习教程:天猫商品数据爬虫

    天猫商品数据爬虫使用教程 下载chrome浏览器 查看chrome浏览器的版本号,下载对应版本号的chromedriver驱动 pip安装下列包 pip install selenium pip in ...

  4. python视屏教程_终于拿到了清华学霸整理出来的全套Python视频教程+项目源码+笔记...

    为什么要学习Python?机器学习?数据分析?爬虫? 在找到一本Python书啃之前,一定要问问自己为什么要学习Python? Python在这近几年里面越来越受追捧,很多的同学小伙伴都想用Pytho ...

  5. python会计实证研究_实证研究者的爬虫工具选择

    作为一个实证研究小青年??,有段时间因为研究的需要,要做定向爬虫.这是自己学习Python最初的缘由.那个时候爬虫的材料还不是太多,自己在网上找了一些文章和电子书来学习.边学边试,不久就完工了. 完工 ...

  6. python清单全套教程_编程最经典的一份python学习清单,零基础都可以学会的教程...

    站在风口上,猪都能飞起来.人工智能风口,让Pyhon这门胶水语言转变成非常火的网红语言. 编程功力深厚的程序员花一两个星期就能上手Python,而一些新手程序员花几个月就可以上手. 学编程,用Pyth ...

  7. python图形界面教程_图形教程

    python图形界面教程 众所周知,我们可以借助Java库制作游戏,这些库为我们提供制作游戏所需的图形. 因此,今天我将开始一个关于Java图形的非常新的部分. 我之前曾发表过有关如何制作所得税计算器 ...

  8. python爬表情包_【从零开始写爬虫一】批量下载表情包

    序 打算写个关于node的爬虫菜鸟教程,接下来将带大家一步一步写一个表情包爬虫,从获取页面,解析表情包链接, 清洗脏数据,下载表情包到本地.开始之前你需要有对chrome调试工具和ES6有一定了解,包 ...

  9. python微信使用教程_小白用Python | 十分钟Python玩微信教程

    原标题:小白用Python | 十分钟Python玩微信教程 代码放在这里:wzyonggege/python-wechat-itchat 词云那里可以换成小黄人图片 ---------------- ...

最新文章

  1. velocity.js 动画插件
  2. 高和父元素的高一致_首次:低温熔盐法合成菊花状三维高熵硼化物纳米花 (华南理工大学褚衍辉课题组最新研究成果)...
  3. 博后招募 | 澳大利亚悉尼大学徐畅老师招收深度学习方向博士后/全奖博士
  4. linux 8g内存 swap,linux可用内存足够为什么还用swap
  5. 浅析MongoDB数据库的海量数据存储应用
  6. Spark Streaming(三)zookeepe搭建
  7. 变量绑定对话框控件不同类型成员变量的绑定
  8. Linux 设备驱动中的 I/O模型(一)—— 阻塞和非阻塞I/O
  9. 【牛客 - 373B】666RPG(线性计数dp)
  10. 直流有刷减速电机结构及其工作原理
  11. 日期多选插件Kalendae.js
  12. 计算机样式的ppt,计算机应基础使用样式修饰页面.ppt
  13. 计算机网各管理员技能鉴定,计算机网络管理员国家职业技能鉴定考核指导
  14. P值计算(Excel)
  15. Running Median
  16. c# ascii转换方法
  17. 在短短几分钟内用冰柱构建超快速PHP服务器
  18. LTE网络RLC层的polling机制
  19. PHP5.4 如何连接MS Sql Server
  20. React之表格操作

热门文章

  1. ejb生命周期_无状态EJB:池化和生命周期
  2. 检查两个列表在Java中是否相等
  3. Java 10及更高版本的思考
  4. Java 10 – JEP 286:局部变量类型推断
  5. websockets_使用Java WebSockets,JSR 356和JSON映射到POJO的
  6. java 自定义注释_带有自定义注释的Java注释教程
  7. Cloud Foundry Java客户端–流事件
  8. javame_JavaME:Google静态地图API
  9. coherence安装_在Oracle Coherence中分发Spring Bean
  10. JUnit:使用Java 8和AssertJ 3.0.0测试异常