如果要求网页抓取和内容格式化工具软件DataScraper进行周期性网页抓取和信息提取,那么需要为DataScraper配置周期性网页抓取调度文件,这是一个XML文件,存放在主目录($HOME)下的目录.datascraper中,文件名字是crontab.xml。DataScraper运行的时候如果发现这个文件,将解析出周期性调度参数,如果设置了auto参数,将自动启动多个DataScraper进程,每个对应一个auto类型的周期性网页抓取会话,无论auto类型还是非auto类型的周期性网页抓取会话都可以手工启动。
周期性网页抓取调度文件是用户根据需要自行编写的,下面将讲解该文件的结构和编写要领。
<?xml version="1.0" encoding="UTF-8"?> <crontab> <thread name="project_low"> <parameter> <auto>true</auto> <start>10</start> <period>10800</period> <waitOnload>false</waitOnload> <minIdle>2</minIdle> <maxIdle>10</maxIdle> </parameter> <step name="renewClue"> <theme>project_list_design.www.sxsoft.com</theme> </step> <step name="crawl"> <theme>project_list_design.www.sxsoft.com</theme> <loadTimeout>3600</loadTimeout> <lazyCycle>3</lazyCycle> <updateClue>false</updateClue> <dupRatio>80</dupRatio> <depth>-1</depth> <width>-1</width> <renew>false</renew> <period>0</period> <scrollWindowRatio>2</scrollWindowRatio> <scrollMorePages>10</scrollMorePages> <allowPlugin>false</allowPlugin> <allowImage>false</allowImage> <allowJavascript>false</allowJavascript> </step> <step name="crawl"> <theme>project_design.www.sxsoft.com</theme> <updateClue>false</updateClue> <dupRatio>80</dupRatio> <depth>-1</depth> <width>-1</width> <renew>false</renew> <period>0</period> <resumePageLoad>true</resumePageLoad> <resumeMaxCount>3</resumeMaxCount> </step> <step name="uploadResult"> <theme>project_design.www.sxsoft.com</theme> <sliceSearchLoc>http://www.metaseeker.cn/projectsearch/</sliceSearchLoc> <account>userName</account> <password>thePassword</password> </step> <step name="indexHarvest"> <theme>project_design.www.sxsoft.com</theme> <sliceSearchLoc>http://www.metaseeker.cn/projectsearch/</sliceSearchLoc> <account>userName</account> <password>thePassword</password> </step> </thread> </crontab>
其中:
- crontab标签代表整个XML文件体,一个XML文档只能有一个。
- thread标签包围的参数块代表一个周期性网页抓取会话,一个XML文档可以有多个,每个对应一个独立的DataScraper窗口,每个会话应该有个名字,用thread的name属性表示,当使用DataScraper手动启动周期性网页抓取时,使用名字指定启动哪一个。
周期性网页抓取会话参数块分成两大部分,最前面是参数部分;后面是多个信息提取步骤,用step参数块表示。参数部分只有一个实例,有下面的参数:
- auto:true或者false,表示是否自动启动周期性网页抓取会话
- start:是一个数字,以秒为单位,表示延迟多久启动周期性网页抓取会话,为了有效利用CPU能力,多个会话的延迟时间应该不同,防止挤在一起造成拥塞
- period:是一个数字,以秒为单位,表示下一次调度的时间间隔,注意:并不是准确的调度周期,而是完成一个批次的网页抓取后停歇的时间,因为上一个批次实际花费的时间难于预先确定(例如,受网络通信条件的限制),所以一个周期的实际时间是不能确定的。
- waitOnload:true或者false,表示是否等待目标页面完全加载完才进行提取,false表示不等待,只要被提取的内容已经加载了就开始提取,可见可以有效提高信息提取性能,但是有些页面内容是Javascript动态生成的,有时候等待其完全加载完也许更稳妥。到底选择true还是false没有确定的规则,可以先设置为false,如果发现有内容遗漏再该用true。对于非周期性信息提取都是true。
- minIdle:可选参数,是一个正整数,以秒为单位,表示抓取完一个网页后等待的最短时间,这个参数和下一个参数配合,DataScraper能够等待一个两者之间的随机时长,可以避免对目标网站造成过大的流量压力。
- maxIdle:和选参数,是一个正整数,以秒为单位,而且应该大于minIdle。
注意:如果需要跨平台,而且配置文件中有中文内容,配置文件第一行不能省略。否则,中文内容无法正确解析出来。
周期性网页抓取会话中可以有很多步骤,V4在线版有四个预定义的步骤类型,企业版可以根据客户需求定制扩展。四个类步骤分别是
- renewClue:将某个主题的所有信息提取线索的状态修改成start,这样DataScraper又可以抓取这个线索指向的网页了。理论上任何主题的线索都可以将状态重置为start,但是,实际应用时如果错误的将某些线索置为start,只能浪费信息提取的时间,例如,提取在线拍卖网站上的商品信息网页上的商品规格信息,提取完成后该线索置为extracted,拍卖结束后这个商品的信息没有再次提取的必要了,所以将其重置为start只能阻碍新商品信息的提取,相反,这个步骤应该用来重置指向商品列表页面的线索。另外一种情形,在线购物网站上,商品信息页面是长期有效的,例如,价格随着时间变化,做商品比价服务时需要周期性提取该页面,原则上可以用这个步骤重置这类信息提取线索,但是,应该采用下面讲述的服务器侧调度周期性信息提取方法。另外,属于同一个主题的线索数可能很大,服务器限制重置的线索数为10000个。上例重置的主题是project_list_design.www.sxsoft.com,实际上只有一个线索,此页面上显示所有最新外包项目列表,使定题网络爬虫的入口点,显然,使用renewClue步骤重置状态再合适不过了。
- crawl:命令网络爬虫抓取某个主题的网页并抽取网页内容,执行DataScraper中的信息提取工作流,从DataScraper界面上的主题列表上也可以手工启动针对某个主题的信息提取,但是有些差别,该步骤能够自行决定提取多少个线索,而不需要用户通过界面输入。而且,配置参数能够约束提取的深度和广度,有以下参数:
- theme:主题名
- loadTimeout:加载目标网页等待的时间,以秒为单位,如果超过这个时间还没有将需要的内容加载到内嵌浏览器中,就放弃抓取。注意:一般这个参数用于抓取需要翻页的线索,因为翻多页到中间某页因为超时放弃太可惜了。如果用于抓取单页内容,可以不用设置这个参数,而是保持缺省的60(秒),太长的超时时间会因为目标网站速度过慢拖累网页抓取效率
- lazyCycle:只对积极模式或者积极延长模式有效,以秒为单位。缺省是5秒钟(不配置该参数的话),这是一个很保守的数字,抓取速度受影响,很多时候可以将该参数设置成1~4,以提高速度,该参数的选择并不根据目标网页的下载速度,而且目标网站的速度的稳定性,如果异步加载内容时快时慢,这个数字应该调大。当然,从感官上难于判断速度的稳定性,主要靠检查抓取结果是否符合预期而做事后补救。详细用法参见网页抓取模式
- updateClue:true或者false,在提取网页内容时可以提取到其它主题的线索,例如,当前主题是project_list_design.www.sxsoft.com,在外包项目列表页面上提取到主题是project_design.www.sxsoft.com的线索,如果MetaSeeker系统发现这个新提取到的线索指向的页面以前提取过,这个参数决定怎样对待这个线索,true表示将这个线索的状态重置为start,false表示不修改原来的状态。
- dupRatio:是百分比的分子,是0~100的整数,用于翻页提取的情形,例如,外包项目列表页面上的外包项目很多,分成多页显示,前面页上显示最新项目,当翻页提取到以前提取过的内容时,应该终止信息提取过程,该参数表示发现多少线索重复时停止翻页。
- depth:正整数或者-1,表示翻多少页停止,-1表示不停止,这个参数与dupRatio结合使用,哪个条件先成立就采用哪个。注意,这里的深度的含义与普通的网络爬虫的含义不太一样。
- width:正整数或者-1,表示这轮周期性网页抓取会话最多提取该主题的多少个线索指向的页面,-1表示不限制,也就是说无论有多少个状态为start的线索,都在这一轮提取完。注意,这里的广度的含义与普通网络爬虫的含义不太一样。
- renew:true或者false,表示是否启用服务器侧调度的周期性信息提取,注意,在线版MetaSeeker忽略该参数
- period:正整数,表示服务器侧调度周期性信息提取的周期,注意,在线版MetaSeeker忽略该参数
- resumePageLoad:(V4.10.0版本新增参数),true或者false。如果大量的DataScraper线程同时抓取网页信息,在某个时刻可能因为网络拥塞造成目标网页下载超时,该参数表示是否重新下载该网页,跟参数resumeMaxCount配合,可以有效提高网页抓取可靠性。注意:并不是所有网页能够重新下载,例如,AJAX网站通过发送HTTP消息异步刷新网页内容,该类网页无法有效重下载或者回退;再如,通过发送HTTP POST消息下载的网页,无法有效地重新下载,因为在重新下载时Firefox将弹出一个alert提示框,此时,DataScraper简单地关闭了该提示框,POST消息并未发送。
- resumeMaxCount:(V4.10.0版本新增参数),正整数,表示重新下载尝试次数。
- scrollWindowRatio:(V4.11.1版本新增功能)滚屏延时,一个大于零的整数。假设为N,那么每滚一屏,延时1/N秒。详细说明参见下一个参数scrollMorePages。
- scrollMorePages:(V4.11.1版本新增功能)额外滚屏次数,缺省值是0,表示不滚屏。滚屏功能用于抓取AJAX网页上的数据,这些数据一开始没有从服务器上下载下来,直到用户滚动浏览器屏幕并在窗口中显示这些数据时才下载。详细使用方法参见如何自动滚屏抓取AJAX网站数据
- allowPlugin:(企业版专有功能)是否允许加载需要专门插件解释的内容,true或者false,例如,视频、Flash等内容。详细使用方法参见如何抓取网页时阻止插件和图片
- allowImage:(企业版专有功能)是否允许加载图片,true或者false。详细使用方法参见如何抓取网页时阻止插件和图片
- allowJavascript:(企业版专有功能)是否允许加载并解释Javascript,true或者false。详细使用方法参见如何抓取网页时阻止Javascript
- uploadResult:将信息提取结果文件(XML文件)打成ZIP压缩包,并且上载到SliceSearch服务器上。注意,只在部署了SliceSearch服务器条件下使用该步骤,否则会导致周期性信息提取会话中断
- theme:主题名
- sliceSearchLoc:完整的SliceSearch服务器的URL地址,最后要有结尾斜杠
- account:SliceSearch管理员账号
- password:SliceSearch管理员口令
- indexHarvest:命令SliceSearch服务器为指定主题的信息提取结果建立索引,该命令下发后不一定立即开始索引操作,而是将索引请求进行排队。注意,只在部署了SliceSearch服务器条件下使用该步骤,否则会导致周期性信息提取会话中断
- theme:主题名
- sliceSearchLoc:完整的SliceSearch服务器的URL地址,最后要有结尾斜杠
- account:SliceSearch管理员账号
- password:SliceSearch管理员口令