爬虫-Xpath-数据提取

本文介绍了XPath的基本用法,包括选取XML或HTML文档中的节点和节点集。通过实例展示了如何利用XPath表达式选取特定标签、属性值以及文本内容。还提供了在Python中使用lxml模块进行XPath数据提取的步骤。
部署运行你感兴趣的模型镜像


XPath (XML Path Language) 是一门在 HTML\XML 文档中查找信息的 语言,可用来在 HTML\XML 文档中对 元素和属性进行遍历

xpath基本介绍和使用

  • XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。

  • 使用chrome插件选择标签时候,选中时,选中的标签会添加属性class="xh-highlight"

xpath中常用的获取节点的表达式

在这里插入图片描述

  • /表示就是 标签和标签之间的过渡
  • //表示就是跨标签去定位标签,//a表示将当前页面中所有的a标签选中
  • .表示当前路径
  • @属性名: 获取到标签中属性的值
  • text():获取标签中的文本内容**

栗子:

豆瓣电影top250的页面来练习:https://movie.douban.com/top250
1 选择所有的h1下的文本
//h1/text()
在这里插入图片描述

2获取所有的a标签的href
//a/@href
在这里插入图片描述

3获取html下的head下的title的文本
//html/head/title/text()
在这里插入图片描述

4获取html下的head下的link标签的href
/html/head/link/@href
在这里插入图片描述

xpath中常用的获取特定节点的表达式

在这里插入图片描述

  • //标签名[@属性名=值] 根据标签的属性以及属性的值获取特定的标签
  • //标签名[num] 获取选取到的所有标签的第几个标签,num从 1 开始。
  • //标签名[last()] 获取选取到的所有的标签的最后一个标签,注意:最后一个不是 -1。
  • //标签名[text()=值] 根据标签中的文本内容的值,获取到某个标签。。
  • //标签名[position()>num] 表示从第num个标签获取
  • //标签名[position()<num] 表示从第一个获取到第num个标签

栗子:
豆瓣电影top250的页面来练习:https://movie.douban.com/top250
1 选取所有的电影的名字:

先定位到 class=hd的div标签,再取下面的a标签下面的第一个span标签
//div[@class=‘hd’]/a/span[1]
//span[@class=‘title’][1]
在这里插入图片描述
在这里插入图片描述

2 选取所有的href:

先定位到 class=hd的div标签,再取下面的a标签中href属性的值
//div[@class=‘hd’]/a/@href

在这里插入图片描述
在这里插入图片描述

3 选取所有的评分:

//div[@class=‘star’]/span[@class=‘rating_num’]
//span[@class=‘rating_num’]/text()
>
在这里插入图片描述

4 选取所有的评价人数:

//div[@class=‘star’]/span[last()]
>

  • lxml 模块可以让我们在Python代码中去使用 xpath 语法表达式来进行对 html/xml 数据进行提取
  • 将转换后的Element对象再转换成html_str, 可以使用 etree.tostring(element).decode()
  • 一般使用xpath来提取数据,都是会先对数据进行分组,然后再遍历提取。

使用步骤

导包: from lxml import etree
将html字符串转换成Element对象: element = etree.HTML(html_str)
使用Element对象中的xpath方法书写xpath表达式,来定位或者获取标签中的内容: element.xpath(xpath_str)
使用xpath语法如果定义到标签,返回的就是一个列表,列表中的每个元素是一个Element对象,可以遍历再去使用 Element.xpath() 方法继续提取数据。

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值