XPath定位数据教程 |
您所在的位置:网站首页 › 八爪鱼app为什么启动不了游戏 › XPath定位数据教程 |
教程首页 功能点 8.0功能点 【8.0】XPath学习与实例
【8.0】XPath学习与实例
2019-10-31 11:07:42 阅读量: 15650 XPath对于八爪鱼数据采集十分重要。绝大多数的数据采集问题,都可以通过写一条正确的XPath解决。 本课将详细讲解XPath相关的问题。
一、HTML 与 XPath
我们日常浏览的网页本质上都是一个个HTML文档。打开网页后,鼠标右键打开菜单,选择【查看网页源代码】,就能看到该网站的HTML文档。网页上的数据,在其HTML文档中都有一个对应位置。
鼠标放到图片上,右键,选择【在新标签页中打开图片】可查看高清大图 下文其他图片同理
如何在HTML文档中找到想要的数据?XPath是最常用的语言。火狐浏览器的XPath工具,可以帮助普通用户在HTML文档中快速定位到想要的数据,并自动生成定位数据的XPath路径表达式。(点击查看火狐XPath工具安装与使用说明)
二、HTML、 XPath 与 八爪鱼
我用八爪鱼采数据?为什么要学XPath?很多人都有这样的疑惑。
八爪鱼采集网页数据,本质上是在HTML文档中采集数据。配置采集任务时,也是使用XPath路径表达式在HTML文档中定位想要的数据。以配置【循环翻页】步骤为例。在网页上选中【下一页】按钮建立【循环翻页】时,八爪鱼内置的XPath工具自动将【下一页】按钮在HTML文档中的位置找出来,并生成一条XPath路径表达式,记录【下一页】按钮在HTML文档中的位置。
八爪鱼能自动生成定位XPath,为什么我们还要学XPath?还是以【循环翻页】步骤为例。大多数情况下,自动生成的定位XPath没有问题,可正常翻页。少数情况下,自动生成的定位XPath有问题,出现 “直接从第2页跳到最后1页” “在某几页之间重复翻页” 等翻页问题。这时候,我们就需要学习XPath知识,去写一条符合需求的、正确的XPath。
XPath路径表达式是通用的。由于八爪鱼中不方便查看HTML文档,我们通常使用火狐XPath工具去找到正确的XPath,然后再将其复制到八爪鱼中去。
三、认识XPath的结构
先自己自动生成几个XPath,看一下XPath结构有什么规律。几个示例XPath: .//*[@id='subject_list']/ul/li[1] .//*[@id='subject_list']/ul/li[1]/div[2]/p html/body//li[@class='next']/a[1]
事实上,XPath通过HTML标签和属性查找数据: 标签:html body ul li div p a ...... 连接标签的符号:/ // 属性和属性值:[@id='subject_list'] [@class='next'] [1]
弄清楚HTML标签、属性及其组合规律,是学会写一条正确XPath的关键。
四、HTML标签、属性与XPath
通过火狐浏览器的XPath工具,我们来看一个HTML实例文档。此时HTML文档中各部分十分清楚: 浅蓝色的 html body li div p 等是标签; 深蓝色的 class id href src 等是属性; 引号中的红色部分是属性值; 黑色的文字是会直接显示在网页上的文字。
下面介绍HTML文档中最常见的标签、属性。
1、标签
定义超链接,用于从一张页面链接到另一张页面 段落标记标签 可定义文档中的区域或节、可以把文档分割为不同的部分,是一个块级元素 创建列表内容项 向网页中嵌入一幅图像,从网页中链接图像 创建一个表格 表格中的每一行 表格中的标准单元格
HTML文档是树状结构,标签具有层级。
在XPath中,HTML标签上一层与下一层之间用 / 连接,跨层级用 // 连接。
例,网址:https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4,我想要定位到第一本书《解忧杂货店》的标题。
可以按照标签的层级,从根标签 html 开始,用 / 一层一层往下,直到标题所在的层级。XPath写法为:html/body/div[3]/div/div/div/div/ul/li[1]/div[2]/h2/a 。
特别说明: a. 标签后紧跟的[1]、[2]、[3]是序号。[1]表示选择同级标签的第1个。[2]、[3]以此类推。 b. 在火狐浏览器的XPath工具中写好定位XPath以后,需按一下键盘上的【回车】键,工具就会自动定位并提示满足定位条件的结果有多少个。
也可以跨层级,用 // 直接定位到标题所在的层级。XPath写法为:.//*[@id='subject_list']//a[@title='解忧杂货店']
注意:因为这里从ul标签到a标签跨层级了,所以需要用 //。如果将 // 换成 / ,XPath 写作 .//*[@id='subject_list']/a[@title='解忧杂货店'],则定位不到标题
2、属性
class 规定元素的类名,大多数时候用于指定样式表中的类 id 唯一标识一个元素的属性,在html里面必须是唯一的 href 指定超链接目标的url src 图像文件的url(直接复制到浏览器中,可打开图片)
关于属性,我们不用明白每一个属性的属性值到底是什么意思,只需根据定位需求,找到标签的属性/属性值的相同/不同之处,以实现精准定位。
属性是用来修饰标签的。XPath中,属性和属性值有固定写法:属性放在标签后面的[ ]里,属性前加@,属性值放在引号内。 例://li[@class='subject-item']。这条XPath的意思是,定位HTML文档中 所有 class 属性值为 subject-item 的 li 标签。
3、常用的XPath函数
有时候,仅通过标签和属性,难以将我们需要的数据精准定位出来。XPath有一套XPath函数,便于我们更精准定位。 下面是一些常见XPath函数,在八爪鱼数据抓取中应用十分广泛,请大家认真学习。
在开始学习XPath函数之前,有2点特别强调: XPath函数有其固定写法,请遵循其固定写法; XPath中的所有符号() [] ''均为英文符号,不可用中文符号。
以下示例网址均为:https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4
text() 用文本定位位置 text()='xxx' 精确定位,引号中的内容需与HTML文档中的文本完全一样 contains(text(),'xxx') 模糊定位,HTML文档中的文本,包含引号中的内容即可
如果需要定位到此网页中的【后页>】按钮。 用text()='xxx' 定位,则XPath为://a[text()='后页>'],引号中的文本一定要为'后页>',如果换成'后页']则定位不到【后页>】按钮。
用contains(text(),'xxx') 定位,则XPath为://a[contains(text(),'后页>')];//a[contains(text(),'后页')];//a[contains(text(),'页')] ;//a[contains(text(),'后')] 均可。
contains() 用于判断文本的一部分是否包含XXX,或者属性值是否包含XXX contains(text(),'xxx') 判断文本的一部分是否包含XXX,上面已经详细说明 contains(@class,'xxx') 判断属性值是否包含XXX
如果需要定位到此网页中的所有图书列表。 直接用属性定位,则XPath为://li[@class='subject-item'],引号中的属性值一定要为'subject-item',跟HTML文档中的属性值完全一致。
如果用contains(@class,'xxx')定位 ,则XPath为://li[contains(@class,'subject-item')];//li[contains(@class,'subject')] 均可。
position() 用于定位节点的位置和限制节点的范围 a[position()=1] 第1个a标签 a[position()>1 and position() |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |