当前位置: 代码迷 >> 综合 >> 爬虫数据提取-xpath
  详细解决方案

爬虫数据提取-xpath

热度:101   发布时间:2023-11-23 00:53:20.0

每日分享:

在感情中最有价值的是,谁能唤醒你的感性,这个人就是合适的。谁能让你变成一个感性的人,谁就是合适的。

目标

  • 了解lxml模块和xpath语法的关系
  • 了解lxml模块的使用场景
  • 了解lxml模块的安装
  • 了解谷歌浏览器xpath helper插件的安装和使用
  • 掌握xpath语法-基础节点选择语法
  • 掌握xpath语法-节点修饰语法
  • 掌握xpath语法-其他常用语法

一、了解lxml模块和xpath语法

对html或xml形式的文本提取特定的内容,就需要我们掌握lxml模块的使用和xpath语法

  • lxml模块可以利用xpath规则语法,来快速定位html/xml文档中特定元素以及获取节点信息(文本内容、属性值)
  • xpath(XML Path Language)是一门在html/xml文档中查找信息的语言,可用来在html/xml文档中对元素和属性进行遍历
    • W3School-xpath官方文档地址:XPath 教程
  • 提取xml、html中的数据需要lxml模块和xpath语法配合使用

二、谷歌浏览器xpath helper插件的安装和使用

要想利用lxml模块提取数据,需要我们掌握xpath语法规则。xpath helper插件可以帮助我们练习xpath语法。

谷歌浏览器xpath helper插件的作用:在谷歌浏览器中对当前页面测试xpath语法规则。

谷歌浏览器xpath helper插件的安装、使用:(以windows系统为例)

1.下载chrome插件xpath helper

以下是xpath helper的百度网盘链接

链接:百度网盘 请输入提取码 
提取码:d8tp

2.把文件的后缀名crx改成rar,之后解压到文件夹(linux或macOS操作系统,无需此操作)

3.在更多工具中找到扩展程序,打开开发者模式,将解压的文件拖进去即可

4.在谷歌页面右上角找到扩展程序固定xpath helper

就可以在页面中看到xpath helper了,点击即可使用(会出现两个框,左边的框输入xpath语句,右边框显示结果)

三、xpath节点(标签/元素)关系

 上图中,html就是根节点,而下面的head、body等等是节点

html是head、body、div的父节点

head与body是同级(兄弟节点)

四、xpath基础语法-基础节点选择语法

  1. xpath使用路径表达式来选取xml文档中的节点或者节点集
  2. 这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似
  3. 使用chrome插件选择标签的时候,选中时,选中的标签会添加属性class="xh-highlight"

4.1 定位节点以及提取属性或文本内容的语法

表达式 描述
nodename 选中该元素
/ 从根节点选取、或者是元素和元素间的过渡
// 从匹配选择的当前节点选择文档中的节点
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性
text() 选取文本
  • 选择所有h2下的文本
    • //h2/text()
  • 获取所有a标签的href
    • //a/@href
  • 获取html下的head下的title文本
    • /html/head/title/text()
  • 获取html下的head下的link标签的href
    • /html/head//link/@href

五、节点修饰语法

以幽默笑话大全_爆笑笑话_笑破你的肚子的搞笑段子 - 糗事百科网址作为练习

1.通过索引修饰节点

注意:索引从1开始,而不是从0开始(与python中的列表的索引不一样)

/html/body/div[1]/div/div[2]/div                             25个相关推荐

/html/body/div[1]/div/div[2]/div[3]                         25个相关推荐中的第三个

/html/body/div[1]/div/div[2]/div[last()]                   25个推荐中的最后一个

/html/body/div[1]/div/div[2]/div[last()-1]                25个推荐中的倒数第二个

/html/body/div[1]/div/div[2]/div[position()<=10]            25个推荐中的前10个

/html/body/div[1]/div/div[2]/div[position()>5][position()<=5]        25个推荐中的5~10个

2.通过属性值修饰节点

//div/div[@class="col1 old-style-col1"]/div/@id        25个推荐中的id值

3.通过子节点的值修饰节点

//span[i>1000]                25个推荐中多于1000好笑的

//a[i>20]                          25个推荐中评论多于20的

4.通过包含修饰

//div[contains(@class,"col1 old-style-col1")]/div[1]                25个相关推荐中的第一个

//span[contains(text(),'下一页')]                        下图中的“下一页”(代码中的下一页用双引号或单引号括起来)

 5.关于xpath的下标

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

六、其他常用节点选择语法

可以通过通配符来选取未知的html、xml的元素

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

//* -----------------   全部的标签

//node() ----------- 全部的属性

两个语句写在一起,中间用 | 隔开 --------------- xpath复合使用语法(表示两个语句都会执行,两个执行结果整合在一起)