快捷导航

如何通过crontab程序实现周期性增量采集数据?

2015-9-24 16:50| 发布者: ym| 查看: 9065| 评论: 3

摘要: 请注意:GooSeeker网络爬虫软件从V5开始进行了大规模改版,crontab调度文件的参数含义没有变化,只是请注意词汇的变化,罗列如下: MetaSeeker:改称 GooSeeker网络爬虫DataScraper:改称 DS打数机MetaStudio:改称 ...

通过crontab程序可以建立n个DS爬虫窗口采集特定的主题规则,而会员中心的爬虫群则是把设置了调度的主题自动分配给n个DS爬虫来采集。两者的共同点都是用D爬虫,只要规则有等待抓取的线索,DS爬虫就会自动采集。区别是任务的分配方式,crontab是完全指定了DS爬虫采集哪个主题,而会员中心的爬虫群则是随机分配。

注意:GooSeeker爬虫从V5.6.0版本开始,在DS打数机里增加了爬虫群功能,整合了crontab程序,大家可以直接通过爬虫群来实现并发采集,也可以编个混合crontab,把爬虫群和自定义的crontab程序合并到一个crontab文件里。了解更多请看如何运行爬虫群


一、crontab.xml文件配置过程:

  1. 文件名称必须为crontab.xml,文件类型为xml。
  2. 要把crontab.xml文件放到本地电脑.metaseeker文件夹下的default文件夹中,才能被DS打数机执行。
  3. 每次更新crontab.xml文件,都要重启DS打数机
  4. 如果设置了auto参数为true,那么打开DS打数机时,将自启动多个DS爬虫。auto参数为false就要手工启动,方法是:在DS打数机的爬虫群菜单->启动->任务窗口,或者是右击快捷菜单,点击运行爬虫群,再选择要启动的DS爬虫

二、crontab.xml文件参数详解

爬虫调度文件  crontab模板.zip(点击可下载)是用户根据需要自行编写的,可以设置多个爬虫并发采集同一个或多个规则的数据。下面将讲解该文件的结构和编写要领。

2.1,crontab实例说明

下面的crontab实例只设置了一个thread标签对(即一个DS爬虫窗口),共控制了3级规则,专门采集淘宝天猫商品评论。第一级规则“淘宝网_搜索列表”采集商品列表,并通过层级采集把商品网址导入到第二级规则“淘宝天猫_商品详情”,第二级规则除了采集商品详情外,还设置了模拟点击跳到第三级规则的商品评论标签页,第三级规则是“淘宝网_商品评论”“天猫_商品评论”,用于采集淘宝、天猫商品评论。由于第二级规则设置了模拟点击,采集时会自动跳到商品评论页,并且触发第三级规则采集数据,所以,模拟点击相关的两个规则是由上级规则的采集步骤crawl控制的。crontab里不用再写采集第三级规则数据的采集步骤,第三级规则的调度就由第二级规则的crawl控制。注意:想要控制第三级规则的翻页数,只需设置第二级规则crawl里的depth参数即可。如果是层级规则,还是要对每个规则写采集步骤crawl。



2.2,文件结构说明:

  1. XML 声明:如果需要跨平台,而且配置文件中有中文内容,那么,配置文件的第一行XML 声明就不能省略。否则,中文内容无法正确解析出来
  2. crontab标签:代表整个XML文件体,一个XML文档只能有一个crontab标签对。
  3. thread标签:放在crontab标签里面,crontab里可以有多个thread标签对,一个thread标签对控制一个爬虫窗口,每个爬虫窗口名称用thread标签的name属性定义。当手工启动时就是通过这个名字来指定启动哪一个爬虫窗口的。
  4. thread标签对里面包含了parameter标签对和step标签对,通过parameter标签对和step标签对里面的参数设置就可以控制爬虫采集。

2.2.1,parameter标签对

控制爬虫窗口的基本调度设置,一个thread标签对里只能有一个parameter标签对,里面的参数是对爬虫窗口采集速度的基本设置,包含的参数如下:

  • auto:自启动,true或者false,表示打开DS打数机时是否自动打开多个DS窗口。使用爬虫群的话,就去DS打数机菜单 爬虫群->配置里勾选自启动。
  • start:启动DS窗口的延迟时间,是一个数字,以秒为单位,为了有效利用CPU能力,多个DS窗口的延迟时间应该不同,防止挤在一起造成拥塞。
  • period:一轮停歇时间,是一个数字,以秒为单位,注意:并不是准确的调度周期,而是抓取完成一个批次的网址后停歇的时间,一个批次的网址数量是由width一轮线索数量控制的。
  • waitOnload:等待网页加载,true或者false,表示是否等待目标页面加载完成后才进行提取。false表示不等待,只要被提取的内容已经加载了就开始提取,这样能有效提高采集效率,但是对于由Javascript动态生成的网页,要设置为true,等待其加载完成再采集,能确保数据不遗漏。到底选择true还是false没有确定的规则,可以先设置为false,如果发现有内容遗漏再改用true。对于只采集一次的网页建议设置为true。
  • minIdle:线索间等待最短时间,可选参数,是一个正整数,以秒为单位,表示抓完一个网页后等待的最短时间,这个参数和maxIdle参数配合,DS打数机能够等待两者之间的一个随机时长,可以避免对目标网站造成过大的流量压力,降低爬虫监控以及IP封锁的风险。
  • maxIdle:线索间等待最长时间,可选参数,是一个正整数,以秒为单位,必须大于minIdle的时间。

2.2.2,step标签对

控制数据提取的步骤,一共有三个步骤,crawl表示采集数据,renewClue表示激活线索,uploadresult表示上载数据,可以根据需要自由组合。三个步骤要用系统默认的步骤名称来指定,即name属性只能叫crawl或renewClue或uploadResult。 企业版可以根据客户需求定制扩展。详情如下:

  1. renewClue:激活线索网址,实现周期重复采集***主题的线索网址,这个周期是由parameter中的period决定,是从上一次采集完成到下一次激活线索的时间间隔。对应爬虫群调度的激活线索设置,但爬虫群是定时激活,最短的时间间隔是日。将某个主题的所有线索网址的状态激活为等待抓取,这样DS打数机就可以重新抓取这些线索指向的网页了。理论上任何主题的线索都可以将状态重置为等待抓取,但是,实际应用时如果错误的将某些没用线索置为等待抓取,只会浪费采集数据的时间,例如,采集"淘宝天猫_商品详情"时遇到下架的商品就会采集失败,激活后还是会采集失败,甚至有些线索不是自己想要的,但也被激活了,爬虫就要把所有线索都采集一遍,但这是没有必要的,所以,这个步骤应该用来激活指向商品列表页面的线索“淘宝网_搜索列表”。 另外,属于同一个主题的线索数可能很大,服务器限制重置的线索数为10000个。上图激活的主题是“淘宝_商品搜索列表”,实际上只有几个线索,此页面上显示了用关键字搜索到的所有商品,是定题网络爬虫的入口点,显然,使用renewClue步骤重置状态再合适不过了。

  2. crawl:采集数据,对应爬虫群调度的高级设置。一个thread里可以写多个crawl步骤,从而指定采集多个主题,通过theme标签来指定采集哪个主题,而爬虫窗口就会自动依次采集完一个主题,然后才会采集下一个主题。配置以下参数能够约束采集速度、翻页、一轮线索数量等等,具体如下:
    • theme:指定要采集数据的主题名
    • loadTimeout:超时等待时间,表示加载目标网页等待的时间,以毫秒为单位,如果超过这个时间还没有将网页加载到DS窗口浏览器中,就放弃抓取,相当于DS打数机配置菜单中的超时时长。注意:这个参数通常用于翻页采集的线索,因为翻多页到中间某页因为超时放弃太可惜了。如果用于抓取单页内容,可以不用设置这个参数,而是保持缺省的60000(毫秒),太长的话则会因为目标网站速度过慢而拖累网页抓取效率
    • lazyCycle:延迟抓取时间,只对自动滚屏模式有效,以秒为单位。缺省是5秒钟,这是一个很保守的数字,若抓取速度受影响,可将该参数设置成1~4,以提高采集速度,该参数的选择并不根据目标网页的加载速度,而是目标网站的速度的稳定性,如果AJAX异步加载时快时慢, 这个数字应该调大。当然,从感官上很难判断速度的稳定性,主要靠检查抓取结果是否符合预期而做事后补救。详细用法参见网页抓取模式
    • updateClue:激活下级线索,true或者false,与dupRatio配合使用,表示是否增量采集下级线索。例如,第一级规则是“淘宝_商品搜索列表”,用于采集下级规则 "淘宝天猫_商品详情"的线索,如果GooSeeker爬虫检测到这个线索网址是以前采集过的,true就会根据dupRatio的参数把下级规则以前和新增的线索网址激活一遍,false表示不激活。
    • dupRatio:下级线索重复容忍度,是百分比的分子,0~100的整数。用于翻页提取的情形,该参数表示发现多少线索网址重复时停止翻页,0表示遇到重复的网址就中断采集,100表示从头到尾采集一遍。例如,当翻页提取到以前提取过的网址时,应该终止信息提取过程。
    • timerTriggered:定时器触发,true或者false。一 般用于采集AJAX网页,有些网页的DOM持续变化,从不终止,普通的触发方式会采集失败,就需要用定时器触发。true表示到达超时时长就立刻抓取数据,如果不设置或者设置为false,则默认为普通的触发方式。详细参见定时器触发案例
    • depth:同一线索内翻页次数,可设为正整数或者-1,表示翻多少页停止,正整数表示采集N+1页后停止,-1表示翻到最后一页为止,这个参数与dupRatio结合使用,哪个条件先成立就采用哪个。注意,这里的深度的含义与普通网络爬虫的含义不太一样。
    • width:一轮线索数量,可设为正整数或者-1,表示一轮最多采集某个主题的多少条线索网址,正整数N表示每批次采集多少条线索网址,-1表示一次性采完所有等待抓取的线索网址为止。注意,这里的广度的含义与普通网络爬虫的含义不太一样。
    • resumePageLoad:重新加载网页,true或者false。如果有多个DS打数机窗口并发采集数据,在某个时刻可能因为网络拥塞造成目标网页下载超时,该参数表示是否重新下载该网页,跟参数resumeMaxCount 配合,可以有效提高网页抓取可靠性。注意:并不是所有网页能够重新下载, 例如,AJAX网站通过发送HTTP消息异步刷新网页内容,该类网页无法有效重新下载或者回退;再如,通过发送HTTP POST消息下载的网页,无法有效地重新下载,因为在重新下载时Firefox将弹出一个alert提示框,此时,DataScraper简单地关闭了该提示框,POST消息并未发送。
    • resumeMaxCount:重新加载次数,正整数,表示网页加载失败后,重新加载的次数。
    • scrollWindowRatio:滚屏速度,可正可负的整数,-1和1相同,表示不变速。小于 -1 表示降低速度,大于1 表示提高速度。假设为N>1,那么每滚一屏,延时1/N秒;假设为N<-1,那么每滚一屏,延时|N|秒。采集图片或AJAX网页一定要打开滚屏功能,因为不滚到可见位置,图片是不显示的,而且不能滚得太快,否则有些图片就来不及显示,所以一个比较好的参数组合是 scrollMorePages = 5    scrollWindowRatio = -2
    • scrollMorePages:滚屏次数,缺省值是0,表示不滚屏。滚屏功能用于抓取AJAX网页上的数据,这些JS数据一开始没有从服务器上下载下来,直到浏览器往下滚动把这些数据显示出来才能被采集。请注意,这个数字并不代表准确地滚屏次数,因为程序会根据网页长度自动调整滚屏次数,这个数字可以看成是额外滚屏次数,即为了确保抓取最全的数据,在足够的滚屏次数之上额外增加的次数。常用取值:3 ~ 5。 详细使用方法参见如何自动滚屏抓取AJAX网站数据
    • stopOnDupCont:重复内容中断,true或者false,用于翻页采集防止重复翻页。true表示进行重复内容检查,以防止翻页死循环。如果不用crontab或爬虫群,那么可以通过DS打数机设置,勾上高级菜单->终点标志->重复内容。
    • closePopup:是否关闭弹出窗口。某些网站在浏览时会弹出一些小窗口,从而改变网页结构,导致抓取失败,设置关闭弹窗就会把所有新窗口都自动关闭。
    • allowPlugin:是否允许加载插件,true或者false,例如,视频、Flash等内容需要专门的插件来显示。详细使用方法参见如何抓取网页时阻止插件和图片
    • allowImage:是否允许加载图片,true或者false。详细使用方法参见如何抓取网页时阻止插件和图片
    • allowJavascript:是否允许加载Javascript,true或者false。详细使用方法参见如何抓取网页时阻止Javascript

  3. uploadResult:上载数据,会自动将本地的xml文件打成ZIP压缩包,并且上载到集搜客服务器上,然后就能去会员中心导出excel数据。注意:需要先在会员中心激活入库,才能使用此步骤
    • theme:主题名,需要先去会员中心激活入库,采集时才能打包并上传数据,从而完成xml自动转excel的过程
8

鲜花

握手
2

雷人

路过
1

鸡蛋

刚表态过的朋友 (11 人)

相关阅读

发表评论

最新评论

评论 ym 2015-12-8 12:23
elin_007: .metaseeker文件夹在哪里呢???
在本地电脑里,搜索一下文件名就能找到
评论 Fuller 2015-12-7 23:18
elin_007: .metaseeker文件夹在哪里呢???
如果你的操作系统是Win7,Win8或者Win10,假设你登录windows的账号是work,那么工作目录是c:\Users\work ,那么.metaseeker文件夹就在这个目录下
评论 elin_007 2015-12-7 23:12
.metaseeker文件夹在哪里呢???

查看全部评论(3)

集搜客GooSeeker网络爬虫 ( 粤ICP备11065265号-2 )

GMT+8, 2018-4-23 17:36