找回密码
 会员注册
查看: 29|回复: 0

5.网络爬虫——Xpath解析

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
64454
发表于 2024-9-2 23:44:56 | 显示全部楼层 |阅读模式
网络爬虫——Xpath解析Xpath简介Xpath解析节点选择路径表达式谓语未知节点Xpath实战演示豆果美食实战获取数据源代码前言:📝​📝​此专栏文章是专门针对Python零基础爬虫,欢迎免费订阅!📝​📝第一篇文章获得全站热搜第一,python领域热搜第一,第四篇文章全站热搜第八,欢迎阅读!🎈🎈欢迎大家一起学习,一起成长!!💕💕:悲索之人烈焰加身,堕落者不可饶恕。永恒燃烧的羽翼,带我脱离凡间的沉沦。Xpath简介XPath是一种用于在XML文档中定位节点的语言,它可以用于从XML文档中提取数据,以及在XML文档中进行搜索和过滤操作。它是W3C标准的一部分,被广泛应用于XML文档的处理和分析。XPath使用路径表达式来描述节点的位置,这些路径表达式类似于文件系统中的路径。路径表达式由一个或多个步骤(step)组成,每个步骤描述了一个节点或一组节点。步骤可以使用关系运算符(如/和//)来连接,以便描述更复杂的节点位置。XPath还提供了一些内置函数和运算符,可以对XML文档中的数据进行操作和计算。例如,可以使用XPath的数学函数来计算节点的数值,或使用字符串函数来处理节点的文本内容。在Python中,XPath可以使用lxml库来实现。lxml提供了一个etree模块,该模块包含了XPath的实现,可以方便地对XML文档进行解析和操作,同时支持XPath语法。Xpath解析节点选择XPath用于在XML文档中定位和选择节点,以下是XPath的一些常用用法:1.选择所有节点:使用双斜杠//选择文档中的所有节点,例如://node()2.按标签名选择节点:使用标签名选择节点,例如://book3.按属性选择节点:使用方括号[]和@符号选择具有特定属性值的节点,例如://book[@category="children"]4.选择父节点、子节点和兄弟节点:使用父节点(…)、子节点(/)和兄弟节点(//)选择节点,例如://book/title/..、//book/author/following-sibling::title等5.使用通配符选择节点:使用星号*选择任何节点,例如://book/*选择所有book节点的子节点6.使用逻辑运算符选择节点:使用and、or、not等逻辑运算符选择节点,例如://book[price10]1在这个例子中,谓语是“[price>10]”,它指定了一个条件,它只选择价格大于10美元的书籍。未知节点当我们需要选择一个未知节点时,意味着我们无法确定节点的位置或名称,但我们知道节点具有某些特定属性或特征。在这种情况下,我们可以使用通配符、轴、谓词等技术来选择未知节点。通配符(*)可以用来匹配任何节点,轴可以用来选择与当前节点相关的节点,谓词可以用来筛选符合条件的节点。使用这些技术,我们可以选择任何未知节点,使我们的XPath表达式更加灵活和通用。Xpath语法较多,我不一一演示,但在后面实战演示中,会依次讲解,帮助大家理解学习。理论讲解完毕,我们进入实战!!!💨💨Xpath实战演示所以今天实战内容是关于美食的,毕竟博主是一个吃货。🍧🍨🍩🍪🎂🍰🧀🍖🍗🥩🥓🍔🍟🍕🌭🥪🌮🌯🍜🍝🍠🍢🍣豆果美食实战让我们欣赏一下主页吧!我们今天不获取照片了,毕竟太吸引人了,哈哈哈。>和之前一样,我们点击右键,选择检查,查看元素,接着按CTRL+F键在XPath中,nodename指的是XML文档中的节点名称。节点名称可以是元素名称、属性名称、注释名称、处理指令名称等。第一个是不是很简单,想找那个就输入那个,我们慢慢来。/从根节点选取(取子节点)。url='https://www.douguo.com/'res=requests.get(url)print(res.text)html=etree.HTML(res.text)#/从根节点选取(取子节点)。rest=html.xpath('/html/head/title')#返回Element对象print(rest)12345678910url='https://www.douguo.com/'res=requests.get(url)print(res.text)html=etree.HTML(res.text)#/从根节点选取(取子节点)。rest=html.xpath('/html/head/title/text()')#返回Element对象print(rest)123456789我们在xpath代码里面加入text(),/text()获取Element对象的元素内容(元素文本)//获取任何位置的数据,不从根路径出发#//获取任何位置的数据,不从根路径出发title_text=html.xpath('//title/text()')#一般会获取多个数据print(title_text)123/@属性名获取标签中的属性名的内容#/@属性名获取标签中的属性名的内容attr=html.xpath('//meta/@name')print(attr)123谓语(相当于python里面的索引,条件)选取数据中某部分数据#谓语(相当于python里面的索引,条件)#选取数据中某部分数据index=html.xpath('/html/head/meta[3]')#meta[3]获取meta里面的第3个参数print(index)123456last()获取最后面的数据#last()获取最后面的数据index=html.xpath('/html/body/div[1]/div/a[last()]')#meta[3]获取meta里面的第3个参数print(index)12345position()
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 00:26 , Processed in 0.601114 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表