实战:怎么解决翻页死循环/重复翻页的问题

2015-10-28 11:53| 发布者: ym| 查看: 25313| 评论: 2

摘要: 翻页陷入死循环,原因是翻页标志依然存在,只要存在翻页标志,DS打数机就会一直点击翻页。 解决方法有多种,下面介绍手工调整翻页程序的方法: 一、分析正常翻页和翻页死循环的dom区别 翻页标志的dom(class值/id值 ...

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

一、勾选DS打数机中重复内容

集搜客v5.4.0新版发布,DS打数机中增加重复内容判断,避免翻页抓取中最后一页重复抓取。下载新版本

在DS打数机的高级菜单栏中选择终点标志勾选重复内容,打数机在抓取中判断出现重复内容后会停止抓取。

高级→终点标志→重复内容

crontab.xml中也有这个参数,在stopMark之后

stopOnDupCont:true或者false。设置为true,则表示进行重复内容检查。重复内容检查过程要生效,必须在DS打数机菜单中设置,或者在crontab.xml中设置。


Tips:为避免出现误判,重复内容的判断条件是当抓取内容重复出现三次时,打数机才会停止抓取。所以勾选重复内容后,最后一页会有三个相同的结果文件。




二、分析正常翻页和翻页死循环的dom区别

翻页标志的dom(class值/id值/节点名)到了最后一页通常会与之前的不同,如下图,正常翻页时是@class=pn-next,翻页标志变为灰色后是@class=pn-next disabled。

Tips:MS谋数台怎么切换网页?

不勾内容定位,点击网页或输入新网址进行跳转,然后选择文件菜单->刷新网页结构。例如:在这里,不勾内容定位,直接点击到最后一页,刷新网页结构,点击翻页标志就能看到其dom结构。

做了翻页线索后,点击查看,在爬虫规则里看到xpath路径 //*[@id='J_bottomPage']/span[position()=1]/a[.//text()='下一页' and position()=5],这是用span和a节点的次序来定位翻页标志,次序变化的话就会翻页失败,最根本的原因是没有区分class值的变化,这样就会导致死循环。

三、修改xpath

只要找出正常翻页和翻页死循环的dom区别,根据这种变化,有多种修改xpath的方式,请根据实际情况做修改,在这里针对本案例介绍以下方法:

1、手工修改线索规则的xpath:前面说了正常翻页与最后一页的翻页标志,其对应的属性值(id/class值)是不同的,利用这个差别来修改xpath,翻到最后一页就会由于属性值不同而终止。

本案例中:正常翻页时是@class=pn-next,翻页标志变为灰色后是@class=pn-next disabled。所以,在线索规则里把 a[.//text()=”下一页" and position()=5] 改为 a[.//text()="下一页" and @class='pn-next'] 或 a[.//text()="下一页"  and not (@class ='pn-next disabled')],点击保存修改,如下图,最后点击爬数据测试一下是否修改成功。

注意:保存修改就是保存了规则,无需再点击存规则,否则,修改的程序会被自动生成的程序覆盖而失效。

2、调整翻页映射本案例中,attributes中的@class节点也会发生变化,不勾文本记号,把@class节点做记号映射,同时,用翻页区对应的区块节点映射给线索1,可以避免生成包含position()的xpath,如下图,点击存规则和爬数据,测试是否摆脱死循环。

3、利用层级原理来实现翻页

如果翻页标志的dom里能找到@href网址,说明每一页是有独立网址的,可以不做翻页线索,利用层级抓取中的下级线索来翻页。更多操作细节看利用层级翻页,流程如下:

1)新建一个整理箱,单抓翻页标志的@href节点,并把它作为下级线索,整理箱顶点最好要做定位标志映射,提高定位的精确性和网页适应性

2)爬虫路线窗口中,目标主题名填当前主题,这样就会把下一页网址采下来作为自己的新线索,用DS采数据时,输入线索数就填一个比翻页总数大的数字,这样每抓完一页就会自动抓下一页,不用每次都点单搜/集搜输入线索数啦

注意:大多数网站的超链接网址显示的相对网址,即缺少网站域名部分,采下来的结果文件里看到的就是少了域名的网址,但是,作为下级线索的话,生成线索的过程中会自动补全网址


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

鲜花

握手

雷人

路过
1

鸡蛋

刚表态过的朋友 (8 人)

相关阅读

发表评论

最新评论

评论 ym 2016-6-21 16:55
gsk117520: 为什么改好了线索规则后也点了保存修改 没点保存规则,但是重新载入这个规则看见线索规则还是没变啊
加载规则或保存规则都是根据映射重新生成规则程序的,而手工修改的规则程序是保存到了服务器中,所以重新加载/保存规则就覆盖手工修改的规则程序。但是采集时是会调用服务器上的程序,如果手工修改规则程序,最好是把程序人工备份,以便加载规则时使用。另外,只要抓取没问题,不用加载规则看的
评论 gsk117520 2016-6-21 14:43
为什么改好了线索规则后也点了保存修改 没点保存规则,但是重新载入这个规则看见线索规则还是没变啊

查看全部评论(2)

GMT+8, 2024-10-31 12:53