自定义xpath:精确采集

2016-5-27 18:10| 发布者: ym| 查看: 24259| 评论: 0

摘要: 一、什么情况要自定义xpath? 同一信息有不同的网页结构 同一信息在所有网页中不一定存在 网页结构比较复杂,数据定位不准确 需要对数据进行提取过滤 爬虫路线:翻页陷入循环 设置连续动作:悬浮、点击、输入 ...

注:集搜客GooSeeker爬虫从V9.0.2版本开始,爬虫术语“主题”统一改为“任务”,在爬虫浏览器里先命名任务再创建规则,然后登录集搜客官网会员中心的“任务管理”里,就可以查看任务的采集执行情况、管理线索网址以及做调度设置了。

一、什么情况要自定义xpath?

  • 同一信息有不同的网页结构
  • 同一信息在所有网页中不一定存在
  • 网页结构比较复杂,数据定位不准确
  • 需要对数据进行提取过滤
  • 爬虫路线:翻页陷入循环
  • 设置连续动作:悬浮、点击、输入、滚屏、选择

二、对数据采集规则自定义xpath

一个XPath是一串html节点,他们之间用/分割,目的是定位到html中某个信息节点。从XPath最前面那个节点开始,在html的DOM树(参看MS谋数台的网页结构窗口)上逐层查找到某个节点,而这个节点就是该XPath的定位结果。一个XPath也可以定位到一个节点,也可以定位到多个节点的集合,套上一些函数还能计算出布尔值。

整理箱就像一个箱子,可以存储很多抓取内容(看下图右侧),代表这个箱子的称为容器节点,它是在创建整理箱的时候自动生成的第一个容器节点,在它下面就可以建立树状结构的抓取内容。整理箱的作用是在网页上限定一个范围,所有抓取内容都是在这个范围内。比如,下图左侧,最上面那个DIV就划定了网页范围,这个范围通常是自动生成的,但是通过对容器节点做定位标志或样例复制映射就可以改变选定的网页范围。

这个划定范围的DIV是个基点,整理箱内部的抓取内容的XPath表达式都是从这个基点开始定位的,所以,内部的XPath都是写成相对定位表达式,例如 ./div/....或者div/span/...或者*//*[@class='title']/...,不会写成绝对定位表达式,例如 /html/body/.....或者//div/span/....,因为这样的格式是以网页最高节点(html)出发的,总之开头都不是/符号。

所以,要确保一个原则:自定义xpath是相对基点而言的,基点就是容器节点的xpath,内部的抓取内容的xpath路径都是相对它来定义的,写自定义XPath的时候,尽量不要用绝对XPath定位表达式(即用/或者//开头的那种)。

下面以百度新闻为例讲解如何自定义xpath。点击可下载本案例规则:百度新闻搜索结果

2.1 建立整理箱,对抓取内容都做内容映射,最好也做上定位标志映射,能够提高定位准确性;这里要采集整个搜索结果列表,还要对容器节点”列”做样例复制映射定位标志映射来抓取多样例。此时,已经完成规则的定义了。

2.2 点击测试,在输出信息窗口看到部分结果的摘要信息没抓到,说明摘要有不同的网页结构。对于多种结构,我们可以按照下面2.3、2.4、2.5、2.6步骤来分析。

2.3 查看数据规则,每个抓取内容都会有几条备选xpath路径,自定义xpath时,只需使用第一条XPath进行改造。把双引号间的xpath路径拷贝到显示XPath搜索框中(不要包含*)。其中*表示任意节点,//表示从当前节点下任意层级节点,不懂的话请先掌握《xpath基础知识》

2.4 XPath搜索框可以用来获取某个节点的xpath、验证xpath语法、检验xpath是否准确定位等,当xpath语法无误且存在节点时,点击搜索就会统计出节点总数和位置,点击后一个可以逐个检验节点信息。

2.5 上面只定位到15个摘要节点,但实际是有20个摘要,所以需要找到摘要的另一种节点结构。点击网页上没有抓到的摘要信息,会定位到一个dom节点,根据节点情况选择一种“显示XPath***”模式,然后就会生成该节点的xpath,再搜索一下恰好定位到漏抓的5个摘要节点,说明这就是我们要找的另一种结构。

注意:抓取内容的xpath是基于容器节点的相对路径,所以,不要选绝对定位,最好是生成短的xpath路径,适用性更高。

2.6 经以上分析,摘要的两种结构分别是,无图的xpath为//*[@class='c-summary c-row '],有图的xpath为//*[@class='c-span18 c-span-last']或者//*[@class='c-summary c-row c-gap-top-small'],根据这两种结构的异同点来编写出能够定位到20个摘要信息的xpath,这里写成//*[contains(@class,'c-summary c-row ')]或者//*[@class='c-summary c-row '] | //*[@class='c-span18 c-span-last'] ,再搜索就全了。

2.7  然后要在抓取内容的高级设置中自定义xpath,操作:双击抓取内容“摘要”,勾上高级设置,选择自定义xpath,选择文本内容和专用定位,抓取内容表达式填上 . 点号,再把上面写好的xpath粘贴进去,定位表达式填上 . 点号,最后保存。

注意:点号表示从当前路径开始,上面的xpath是包容在容器节点的基点范围内,加上点号能够更加精确范围。另外,定位模式通常不选网页片段,否则采集下来的是带有html编码的信息,不利于后期的处理和分析。 

2.8 保存规则后再次加载规则,报错提示定位失败。由于百度搜索页面是实时变化的,第一条搜索结果缺少了相同新闻、相同新闻链接这两个信息,所以就看到了定位失败的提示,但只要规则还能采集到数据,就说明规则依然有效,可以不修改规则。想要完全解决这种网页变化使得某些信息缺少的情况,就要做上自定义xpath,否则还会出现定位失败的情况,前提就是要找到一个信息比较完整的样本页面做规则。

2.9 点击相同新闻这个信息,找到它所在的网页节点,再选择“显示XPath***”模式,得到它的xpath表达式,然后点击搜索进行检查。

2.10 对于这种只存在于部分网页中的信息,自定义xpath时只能选择专用定位。把上面的xpath拷贝到抓取内容表达式中,定位标志表达式填 . 就行。

注意:设置了自定义xpath的抓取内容,还要做上内容映射,可以选择整理箱范围内的任意节点映射给它。

2.11 点击测试,无误的话就会在输出信息窗口中看到数据。如果抓到空白信息,说明该xpath不是以容器节点的xpath路径开始的,要重新编写。如果看到如下图的提示,说明xpath有语法错误,请校验xpath语法。

自定义xpath不仅仅只有以上的用法,还可以精确定位,过滤信息,拼接字符串等等,详细说明参见《xpath常用函数用法》

关于专用定位、兼用定位的区别请看http://www.gooseeker.com/doc/thread-1767-1-1.html

三、对爬虫路线自定义xpath

爬虫路线通常用于设置下级线索以及点击,一个规则的爬虫路线只能设置一次点击,其与连续动作的区别请看http://www.gooseeker.com/doc/thread-1817-1-1.html

当遇到循环点击的情况,有两种方法可以解决,如下:

  • 在DS打数机的高级菜单中->选择终点标志->勾选重复内容,当网页重复出现3次时,DS打数机就会判断重复内容后停止抓取。
  • 通过在爬虫路线里自定义xpath,排除导致循环点击的节点,注意:爬虫路线中的xpath支持绝对路径和相对路径,具体操作参见http://www.gooseeker.com/doc/article-148-1.html

四、对连续动作自定义xpath

连续动作可以设置连续多个动作,包括点击、悬浮、输入、滚屏、提交、选择等动作,作用是模拟人机的交互动作,获取目标信息,连续动作教程见《连续动作概念:掌握JS动态网页信息采集》

注意:连续动作的xpath支持绝对路径和相对路径。请根据实际网页情况编写动作对象的xpath。


若有疑问可以集搜客网络爬虫
9

鲜花
1

握手

雷人

路过

鸡蛋

刚表态过的朋友 (10 人)

相关阅读

最新评论

GMT+8, 2024-4-19 11:25