DedeCMS采集功能

来源:互联网 发布:淘宝微淘直播 编辑:程序博客网 时间:2024/04/29 04:32

DedeCMS采集功能使用基本知识讲解  

2010-08-09 16:58:13|  分类:dedecms学习|  标签:采集  规则  列表  内容  页面  |字号 订阅

采集是指有着确定方向、明确目的的采撷和记录写作材料的一种活动。它主要指调查采访和查阅和搜集资料。采集最主要的作用在于为写作、分析、报表获取直接的和间接的材料。今天我们讲的采集主要是指网站采集,网站采集的概念主要是:程序按照指定的规则定向获取其他网站数据的一种方式,另一种简单的说法就是将 CTRL+C CTRL+V 程序化,系统化,自动化,智能化

DedeCMS早期就已经加入了这个采集的功能,以前我们添加网站内容一般都是通过复制、粘贴、编辑然后再发布,这样对于少量的文章还是可以,但如果对于一个新站,什么内容都没有,那就需要复制粘提大量的文章,这是一个重复、枯燥的过程,内容采集就是解决这个问题,将这个重复的操作简化成规则,通过规则进行批量操作。

当然采集还可以通过一些专门的采集器来进行采集,国内比较出名的采集器有火车头。

今天我们这里以DedeCMS程序自带的采集功能来讲解如何使用采集,并介绍如何对采集的内容进行一些批量的管理。

首先我们进入系统后台,打开[采集]-[采集节点管理],在学习使用这个采集工能之前先介绍一些基本的技术知识。

首先我们需要知道HTML基本内容,我们知道浏览器中显示的各种各样的页面其实都是由最基本的HTML组成的,我们可以在我们DedeCMS系统后台发布一篇内容,然后对内容进行一些格式上面的设置。

 
也就是说我们的页面都是HTML代码经过浏览器解析后显示出来的,这些基本的 HTML代码是给机器看的,而解析出来显示的内容是给我们的用户看的,机器其实是一个死东西,他阅读网页不像用户一样,直接看到某一个部分的内容,机器能够看到的是某一部分代码。

例如,我们查看一个网页:http://www.dedemo.cn/news/cms/2009/0304 /791.html,我们很容易就看到这个文档的内容部分,如图中黄色区域。
 
我们的电脑是看不出来的,他不过判断显示出来的东西,他只会去解析代码,我们右键查看这个文件的源文件。

机器是阅读这些代码内容的,他只能看懂这部分的内容在下面这个地方:
也就是说,我们如果需要采集这些内容,需要告诉机器你应该从哪段代码开始,然后到什么地方结束,中间的这个部分就是我们需要的内容,然后将这些内容自动添加到数据库中来,省去自己添加内容的枯燥。
这里我们就讲到了采集中的一个概念:规则,规则简单的说也就是我们告诉计算机需做什么,比如采集内容,我们告诉计算机从什么地方的代码开始,到什么地方的代码结束,这些内容就是一个规则,在DedeCMS程序中我们需要涉及到2个地方的规则,1.列表规则;2.内容规则。

列表规则:告诉计算机你去采集哪几篇文章,这些文章列表从什么HTML代码开始,到什么HTML代码结束;
内容规则:告诉计算机去采集哪个部分的内容,文档的内容是从什么HTML代码开始,到什么HTML代码结束;

我们说学会使用采集功能,其中最主要的也就是学会制定采集的规则,有了这些规则之后,采集其实是非常简单的一件事情。

采集的一般步骤主要有以下几步:
1.    制定列表采集规则,这里设置主要告诉服务器你采集哪些内容,一般都是被采集网站的列表页;
2.    制定内容采集规则:这里告诉服务器你采集页面的内容在页面的哪个部分,一般都是被采集网站的内容页;
3.    选择栏目、条件导出采集内容;
4.    批量对采集过来的内容进行维护;(可以没有)
5.    生成采集后的HTML页面代码;

我们也能够很清晰的看出,采集最关键也是前2个步骤,这两个步骤是决定采集内容是否成功的一个重要环节,有一个地方采集出错都将不会成功采集到网站的内容。

(第一部分结束)
下面我们结合实例讲解如何使用DedeCMS的采集程序来采集页面信息。

我们来看打开的采集节点管理页面:
 
我们把一个整体的采集规则及内容成为一个节点,我们通过对节点的管理可以轻松方便的对我们采集的规则及采集的内容进行管理,当然采集规则也是可以导出的,我们只需要选中相应的采集节点,但后单击[导出配置],就可以将我们事先指定好的采集规则导出来,同大家一同分享。

当然获得了节点规则也可以通过系统的[导入采集规则]将采集规则导入到系统中去,这样方便了对采集节点的管理,同时我们也可以查看这个节点当前采集的内容信息,如采集的日期、创建节点的日期、获取的网址数等等,这些都是采集节点的重要组成部分。

我们下面以采集织梦非官方站点的站长学院栏目为例,讲解如何采集内容的。被采集的地址列表为:http://www.dedemo.cn/edu/index.html

这个是文档内容,所以我们在创建节点的时候先选择“普通文章”,在V5.3中只有普通文章和图集2个支持采集的,以前可以自己定义,但后来发现用的人很少,并且使用起来很多人问题重重,所以在新版本中取消了自己制定采集节点的这些功能。

选择完节点类型后我们开始创建节点,第一个部分是节点的基本信息创建,“节点名称”,这个比较简单,就是方便你分辨节点的名称,这里我们定义为“站长学院_采集”,“目标页面编码”,这个需要你看下你被采集的网页是用的什么编码,一般如果使用的IE浏览器只需要右键就可以查看到:

 
火狐浏览器就需要在[查看]-[字符编码]的菜单中找到相信的字符编码类型:
 
这里我们看到页面编码的类型是UTF-8,所以我们需要设置“目标页面编码”为相应编码。

“区域匹配模式”分为字符串和正则表达式两种,我们通常使用的匹配模式为字符串,当然如果懂得正则表达式的可以使用正则。关于正则这里简单的介绍下。

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

通过正则可以很方便的找到相应的字符区域,但如果要使用这个正则,需要另外学习正则的相关知识。这里我们主要使用的是字符串,所以不做冗述。

内容导入顺序:即导入到栏目中的内容排序,我们默认选择与目标站一致即可,如果需要倒过来排序,选择相应的选项即可。接下来防盗链部分设置,如果被你采集的站点没有开启防盗链可以不必理会。

 

接下来我们来正式开始设置采集的规则了,前面我们也说过采集的规则需要分为列表采集规则以及内容采集规则,列表采集规则需要在一开始就要被设定,只有正确的设定了列表采集规则才能够让服务器知道要采集那些文章。

列表采集规则的设定需要2个部分,第一个部分是列表网址获取规则,指定列表网址获取规则主要是因为很多站长采集目标网站的时候并非就采集几篇内容,可能将目标站整个内容采集下来,而我们在采集的时候发现这个栏目下有几百篇内容,这几百篇的内容通过“上一页”、“下一页”这种形式表现出来,我们要采集内容之前需要让服务器知道整个列表网址。

设置列表采集规则还是比较简单的,列表获取的方式主要有3种:批量生成列表网址,通过系统自动生成批量的地址列表;手工指定列表网址,通过手工指定列表的页面;从RSS中获取,通过RSS文件获取列表页面。如果我们只需要采集一个列表页面,例如我们就只要采集:http://www.dedemo.cn/edu/index.html,只要这10篇内容,那我们只需要在匹配网址中填写这个网址。

如果我们采集多个列表的内容,可以通过自动生成或者指定多个列表页面完成。

我们来查看下列表页,我们单击下面的
 
在单击分页后我们观察地址栏中的地址:
http://www.dedemo.cn/edu/list_3_2.html
http://www.dedemo.cn/edu/list_3_3.html

http://www.dedemo.cn/edu/list_3_10.html
很容易发现,在这个网址列表中只有“.html”前面的内容在发生变化,从2~10,我们换上1试试看:http://www.dedemo.cn/edu /list_3_1.html,发现这个就是我们那个栏目首页,这样我们可以自动指定一个规则。

 
点击匹配网址后面的“测试”按钮来看看,发现这个列表我们已经成功获取了。
 
或者我们选择手工指定,然后在网址列表中进行指定:
 
当然这个列表部分的规则还有更多的功能,比如可以指定列表栏目导入的内容,这部分详细的设置可以查看织梦帮助中心的:http://help.dedecms.com /v53/archives/co/2/1/

我们这里设置完了列表地址,接下来我们需要设置文章网址匹配规则,这个匹配规则是让我们来采集文章列表,告诉服务器要采集哪些地方的文章,在采集这个文章列表之前我们先看几个文章列表的页面。

http://www.dedemo.cn/edu/list_3_2.html

http://www.dedemo.cn/edu/list_3_10.html

我们看这几个列表的页面其中不变的部分是头部导航、右侧的推荐信息,还有底部的内容,主要变化的地方是列表的标题和内容,我们采集列表文章最主要的就是采集列表的文章标题部分,如果我们懂HTML代码观察,最直接的体现就是HTML代码中的列表页部分的内容是变化的。

所以我们在指定采集列表页的时候只需要指定一个统一的规则即可,因为列表的页面都是一样的,所以这个规则适用于所有的列表页。当然,我们也会发现内容页面也是如此,采集的时候只需要指定一个统一的规则就可以采集到相似的所有页面的内容。

当然有一些网站列表链接到其他的内容,这样就遇到了采集规则不匹配的问题,一般表现为无法采集到内容,因为规则不适用,另外一种表现就是采集进度条不动,终止在那里,甚至有时候还会报错。这些原因最主要的就是规则同目标采集网站不匹配造成的,所以在采集内容之前要确保规则的正确性。

接下来我们设置列表采集页面的采集规则,我们首先查看源文件,在IE浏览器右键选择 [查看源文件],打开列表页的源代码。

如果我们有DW的话将这些代码拷贝到DW中去,我们找到那个列表的所在位置:
 
发现这个列表的内容在“<div class="listbox">”这个层里面,也就是说,我们需要告诉服务器采集列表的标题你从这里开始采集,然后直到这个层结束的地方采集为止,我们看到这个层结束的地方是“</div><!-- /listbox -->”,在中间没有发现任何相同的代码。

这里我们需要告诉大家的就是我们这个规则,告诉服务器的起始HTML标签必须是唯一的,也就是说你在这个页面中只有这一个标记,这样电脑才知道从哪个地方开始,到那个地方结束。

采集规则编写的时候很多时间都需要你去寻找那个唯一的标识,有了这些标识,服务器才知道能够将这些内容抓取下来。

我们直到了刚才这个列表所在的范围,就是介于“<div class="listbox">”和“</div><!-- /listbox -->”之间,所以填写到那个采集规则的“区域开始的HTML:”和“区域结束的HTML:”中,这下服务器就将这个之间所有的连接都会作为目标采集的文章列表去继续采集下去。

但有一个问题,我们在列表规则中往往所有的超链接并非都是那个目标采集的文章,例如我们采集的这个页面中,除了类似于http://www.dedemo.cn/edu/2008/1211/514.html这种文章页面,还有一个http: //www.dedemo.cn/plus/feedback.php?aid=514这样的评论页面,我们需要继续采集的页面是内容页,所以我们这里需要将这些不是继续采集的内容页过滤掉。

过滤这些页面织梦的采集提供了2种方式:1. 必须包含,这个就是在采集到的超链接中必须包含哪些内容,2. 不能包含,采集的地址中不能包含哪些内容,这2种方式我们一般使用一种就可以了,我们通过观察可以看出,我们需要采集的内容页面的地址不包含 “feedback.php”,所以我们在这里将所有带有feedback.php的超链接过滤掉,剩下来的就是我们的文章连接了。

这里还有一个对缩略图的处理,我们采用默认即可,设置完成后我们保存进行测试,看看是否能够采集到内容。
 
我们发现已经能够成功采集到文章的标题列表信息:
 
至此,我们的列表信息就采集完毕,接下来我们就设置内容页面的采集规则,这个采集规则和列表页面的采集规则也非常的相似,主要功能就是从重复的内容页面中获取不同的内容,下面我们来进行内容采集。

我们首先打开一篇文章内容,http://www.dedemo.cn/edu/ceshicaiji/2009/0119/781.html,我们将这个网页的源码也复制到 DW工具中来查看:
 
我们可以在这个页面的源码中看到“标题”、“文章内容”这些东西,接下来我们就设置内容采集规则。

在新版本的V5.3中,采集网页内容的话如果页面中有关键词及摘要,系统会自动采集下来,也就是页面代码中:
<meta name="keywords" content="" />
<meta name="description" content=" " />
这2个部分的内容会被自动采集下来,当然很多用户希望自己设置或者生成,那我们在这里先用过滤规则,将自动采集的这些内容过滤掉。

我们在“关键字过滤内容”以及“摘要过滤内容”中填写过滤规则:
{dede:trim replace=""}(.*){/dede:trim}

这里我们说下这个过滤规则,{dede:trim replace=""}正则表达式{/dede:trim},在{dede:trim}标签中间使用正则表达式来搜索被采集的内容中的相应字符串,如果你需要将被搜索到的内容进行替换,则需要指定replace属性.

比如说,如果在内容字段获取时候,我们刚才将所有的关键词替换为空,如果我们自己默认指定关键词则可以这样编写:
{dede:trim replace="DedeCMS,织梦,演示站"}(.*){/dede:trim}

因为我们这里主要是演示,所以采集2个主要字段,1个是内容的标题,另外一个是文章的内容,所以我们需要对应制定2个地方的匹配规则。
我们设置文章标题的匹配规则,因为一般内容的标题都会出现在“<title>”和“</title>”这2个标签之间,所以我们在设置标题匹配规则只需要设置为默认的 “<title>[内容]</title>”,但有一点,我们看下被采集目标站的标题:
 
他每个标题都加上了 “_织梦非官方演示站点”,所以我们需要在指定规则中去掉这部分内容,只需要简单修改下匹配规则就可以了,我们修改为“<title>[内容]_织梦非官方演示站点</title>”,这样我们就完成了标题的匹配规则的编写。

匹配规则,在匹配区域规则中,规则一般为“起始无重复HTML[内容]结尾无重复HTML”(普通匹配,非正则)。

接下来我们设置文章内容的匹配规则,这个匹配规则同标题的匹配规则有些相似,我们只需要找到唯一的HTML开始标记及HTML结尾标记。

我们同刚才指定文章列表规则一样,找到文章的内容被包含在层“<div class="content">”和“</div><!-- /content -->”这2个层标记中间,所以我们所指定的匹配规则也是如此,我们根据上面匹配规则的定义设置如下的匹配规则:
<div class="content">[内容]</div><!-- /content -->

当然,我们被采集的内容当中会有一些不想关的超链接等等,这时候我们需要将那些内容清除,则需要用到过滤规则,这个过滤规则同刚才那个一样,不过系统自带了一些常用的规律规则,我们来看:
 
我们设置好了过滤规则就会在采集中起到不同的效果。

当然在内容采集部分还有几个小选项在这里需要说明下,一个就是分页内容字段,这个如果是采集一个多页的内容时候才会接触到,需要在一开始就设置好分页采集的起始、末尾标记,设置的方法和匹配规则相同。

下载字段中的多媒体资源,这个是采集的时候下载一些多媒体字段的中的附件,一般只支持一些图片、部分flash的下载,如果遇到很多图片无法采集的情况,可能是服务器的原因,要么是本地服务器不支持,要么就是对方的服务器做了防采集的措施。

自定义处理接口,这个主要是通过一些函数对网页的内容进行处理,我们可以设置一个简单的自定义处理接口,我们因为采集到的内容中可能包含HTML代码,那我们把采集的内容都转换为 txt文本,在这里就可以用到自定义处理接口,我们设置内容如下:
@me=html2text(@me);

这样我们就可以保存采集规则,至此在规则编写部分我们就已经完成了,接下来我们开始采集内容:
 

接下来我们开始采集节点的内容
 

采集完成后我们导入到相应的栏目,如果我们之前设置了导出栏目可以勾选那个:使用采集规则中指定的栏目ID(如果目标的栏目ID为0,则用上面选择的栏目),这样设置完就可以导入到栏目中
 

确定后就开始导入到相应的栏目中去,我们查看下test栏目下面的内容:
 
接下来我们需要对这些内容进行处理,我们可以进入系统后台[核心]-[文档关键词维护],在这里我们可以使用“分析系统内的关键词”来自动回去关键词内容。我们“检测已有的关键字”,来自动获取关键词。
 
或者可以通过自动获取摘要或者分页对被采集的内容批量进行维护,非常方便。当然这里对系统批量处理的功能很多,这里就不一一列举了。
 

最后,我们需要生成所有的静态页面,至此所有采集的内容完毕。

其实采集这个东西并不难,原理也都是一样的,主要是你了解几个概念,一个匹配规则、一个过滤规则。匹配规则需要的是你能够找到唯一标识,通过这些唯一标示判断你被采集的内容,过滤规则是将你被采集来的内容进行处理,当然你也可以通过系统的批量处理来维护采集的内容。

采集的经验积累非常重要,一般有些网页,如我们演示的案例非常简单,用div+css布局,并且结构非常清晰,所以采集起来非常简单,但有些网页用表格布局,采集起来就相对麻烦一些,所以这个需要你设置好采集的内容和过滤的内容,这个是需要你有很多采集经验的情况下才能够完成的。

总之采集这个东西能够帮助你的站点在初期把内容丰富上来,但一个长远发展的站点,并非就完全靠采集别人的内容而生存,更重要的是站点的内容,特色、原创,这些东西都是站长需要思考的,所以我们学习采集只是一种简单的应用工具,并不推荐大家全部用采集来做站。

我们总结下本次课程的主要内容:
?采集的基本概念认识
? 采集的一般步骤
?结合实例了解如何设置采集节点的规则;
?基本的批量处理;
原创粉丝点击