1.ZCMS中的Web采集

  ZCMS中的Web采集功能是一个易用的功能强大的基于模板的内容采集和提取工具,支持自动采集文章列表分页、ASP.net分页采集、自动采集URL转向后的内容、自动识别内容编码、自动识别网页修改日期、多线程采集、多层级URL采集等特性,并支持使用代理服务器和URL过滤、内容过滤。

  采集完成后,ZCMS将根据匹配块中的规则,提取文章的标题、内容等信息,并自动添加到指定的栏目,以便于编辑人员进一步利用。

 

2.填写采集基本设置

  切换到“数据通道”下的“从Web采集”菜单下,点击“新建”按钮,可以增加新的采集任务,如下图所示:

1

  其中:

  采集类别文章采集时,采集程序直接将网页转化成ZCMS中的文档;如果是自定义采集,则只采集数据,不进行转换,需要开发程序去读取采集回来的文本,并进行处理。自定义采集只用于ZCMS的二次开发。

  发布日期格式表示从网页内容中提示出来的发布日期的格式,与JAVA中的日期格式一致,以y代表年,M代表月,d代表日,h代表小时,m代表分,s代表秒。

  采集选项中的“下载远程图片”被勾选的话,采集程序会自动将内容中的图片下载到ZCMS服务器,并替换内容中的图片地址。

  采集选项中的“去掉内容中的超链接”被勾选的话,则采集程序会自动将内容中所有超链接变成纯文本。

  采集到此栏目表示采集后的文档存放到哪个栏目。

  内容页最大采集数表示本任务最多采集多少个文章内容页。

  列表页最大采集数表示本任务最多采集多少个文章列表页。

  采集线程数表示同时进行采集的线程个数,此数值越大,则采集速度越快,占用带宽也越多。一般情况使用1个线程即可,最多不超过30个。

  超时等待时间表示如果目标网页所在服务器忙时,采集程序等待的秒数。默认是30秒,一般不应超过120秒。

  发生错误时重试次数表示如果目标服务器没有响应或者响应出错,采集程序重试的次数。

  如果ZCMS所在服务器不能直接访问互联网或者目标网页必须通过特殊代理才能访问,则需要勾选“使用代理服务器”选项,并填写代理服务器的地址、端口、用户名以及密码。

 

3.填写URL规则

  填写完基本设置后,即可开始填写URL规则,以新浪新闻中为例,可以按如下步骤进行:

  1)填写起始URL,将新浪新闻列表页URL填写如下图所示:

2

  2) 填写下一层级URL

  通过观察列表页中的新闻链接,发现大部分新闻链接URL都和下面这个类似:

  http://news.sina.com.cn/s/2013-04-25/140926945423.shtml

  我们将此URL转化为URL通配符,如下所示:

  http://news.sina.com.cn/s/${A}/${D}.shtml

  其中${D}表示此处允许是数字,${A}表示允许是任意字符。

  但有一部分新闻链接URL不符合此规则,例如:

  http://news.sina.com.cn/s/p/2013-04-19/100826876358.shtml

  我们将此URL也转化为URL通配符,如下所示:

  http://news.sina.com.cn/s/p/${A}/${D}.shtml

  然后点击按钮“增加URL层级”,并将上述两上URL通配符填入下一层级的文本框中,如下图所示:

3

  3) 如果列表页不能直接到达文章内容页,则可能需要填多个层级的URL。整个URL处理的流程是:首选采集起始URL(起始URL可以有多个),然后分析起始URL采集回来的HTML文本中的所有链接URL,一一和2级URL通配符比较,如果URL和2级URL通配符中有一个符合则将其采集。待符合条件的所有2级URL采集完后,从2级URL采集回来的HTML中再次提取所有链接URL,一一和3级URL通配符比较……,直到最后一级URL。

  4) 有时候要求过滤掉一部分URL,则需要勾选“URL过滤”选项,并填写过滤表达式,其规则和普通URL通配符类似。采集程序会将URL和过滤URL通配符比较,如果发现和其中的一项通配符符合,则直接忽略不采集。

 

4.填写内容匹配块

  填写完基础信息后,开始填写内容匹配块。内容匹配块有两种匹配模式,简单匹配和复杂匹配。下面我们来介绍一下复杂匹配模式。

  首先打开一个文章内容页面,如下图所示:

4

  我们看到发布日期的格式是yyyy年MM月dd日HH:mm,如果此格式与我们前面填写的发布日期格式不一致,则需要将此格式填入到“基础信息”选项卡的“发布日期格式”中。

  然后查看网页的源代码,找到其中包括标题、发布日期和内容的部位,如下图所示:

5

  复制包括了标题和内容的HTML文本到复杂匹配块文本框,将其中的标题换成${A:Title},内容换成${A:Content},发布日期换成${A:PublishDate},替换后的字符串如下图所示:

6

  接下再打开一个文章内容页,查看网页源代码,用相关的字符串替换标题、内容、发布日期,然后再和前一个比较,找出所有不一致的地方(有多余的空行以及行前行后的空格数不同不算不一致,不需要处理),并用${A}替换,替换后结果如下图所示:

7

  此处的${A}和前面填写URL通配符时含义相同,表示允许任意字符。

  ${A:TItle}中冒号以后的部分表示字段名,采集程序会将此名称和数据库中的文章表字段进行匹配。例如我们可以增加一个${A:Author}匹配符,则匹配到的值会变成文章中作者字段的值。

 

5.填写内容过滤块

  有时候内容中可能会插入一些广告之类的不属于文章正文的文本,需要替换成字符串,因此需要填写内容过滤块。如果不需要过滤任何文本,则不需要填写此选项卡。

  填写内容过滤块的规则和填写内容匹配块一样,符合内容过滤块规则的文本将会被替换成空字符串。允许填写多个过滤块,可以通过“新增过滤块”按钮增加新的过滤块。

  例如我们发现有的页面中有iframe广告,因此我们写入过滤块配置中,如下图所示:

8

6.执行采集任务

  填写完“基础信息”,“匹配块”,“过滤块”块后,点击“确定”按钮,系统将会添加一个新的采集任务,并显示在任务列表中,如下图所示:

9

  选中刚才添加的任务,点击右侧区域的“执行任务”按钮,开始采集,如下图所示:

10

  如果需要采集任务定时运行,请去“系统管理”菜单下的“定时任务”子菜单中配置定时任务,如下图所示:

11

7.采集后的处理

  采集完成后系统会自动按匹配块中定义的规则提取文章内容和标题,并将提取成功的URL自动转化为指定栏目下的文章(文章状态为初稿),如下图所示:

12

  任务执行完成后,弹出如下对话框:

13

  说明已全部转化为栏目下的文章,没有发生错误。

  如果有未能提取成功的URL,则会在最后显示一个未能转化的URL的列表,一般是因为我们填写内容匹配块时有些情况未考虑(通常都会有一部分URL不能提取,除非我们特别熟悉目标网站的文章详细页的规则),这时候我们需要回头修改我们的内容匹配块,一般步骤是:

  1) 从未匹配的URL中复制一个到浏览器的地址栏,打开后查看源代码,按照填写内容匹配块的方法替换掉其中的标题、发布时间、内容,比较替换后的文本和内容匹配块的差异;

  2) 发现该页面和我们原来填写内容匹配块时不一致,此时我们再次查看网页源代码,比照修改内容匹配块,以适应不一致的情况;

  3) 然后点击“处理数据”按钮,再次运行数据提取程序。注意,此时不需要再次执行任务了,因为网页已经采集到了服务器。如果再次执行任务,将会尝试再次下载网页。

  有时候可能需要多次重复这一步骤来提高匹配块的兼容性。在某些特别的情况下,各个文章内容页结构差异很大,可能需要建立多个采集任务才能将同一个URL下的所有文章转入指定栏目下。

  同样地,过滤块也可能有些情况没有考虑到,导致过滤不完全,需要按照和内容匹配块类似的方式进行修改。

 

8.采集效果

  经过以上步骤后,目标网站上的文章数据将会出现在指定的栏目下,如图所示:

14

  如果勾选了“下载远程图片”,则会自动将图片下载;如果目标网页文章内有分页,则会自动合并成一篇文章。