[转载]dedecms 采集教程大全 – beike – JavaEye技术网站.
dedecms 采集教程大全
dedecms 采集节点 出现 Parse error the tag 8 fieldname=’source” is incorrect ! 错误的解决办法
SQL运行器中,执行以下代码:
update #@__co_exrule
set ruleset=replace(ruleset,’fieldname’,’field name’)
或者
用 phpmyadmin 修改 table : dede_co_exrule
将 dede:fieldname=’source’ 改成 dede:field name=’source’ 即可解决
以dede的站长学院>网页制作基础>HTML/XHTML教程为例,地址是
http://www.dedecms.com/web-art/htmlbase/HTML/
一,打开dedecms,进入【采集节点管理】,新建一个节点,模型我们就选择
图1
图1
1、名称的话自己定义一个,主要是标识作用。
2、来源就自己定义个也可以,写上采集对象的信息也可以。
3、防盗链就看目标站点的有无刷新限制,有的话就设置一下超时时间,这个的话比较难判断,具体可以测试一下就知道。
4、页面编码就比较重要,可以在页面点击右键来看该页面的编码。
图2
图2
先看看要采集的信息列表:
图3
图3
来源网址很重要的。列表的获取就是从这里获取的。
自己打开:http://www.dedecms.com/web-art/htmlbase/HTML/
点击分页看下几个分页之间的URL有什么规则
由此不难看出其中的规则可以看下面的url例子:
http://www.dedecms.com/web-art/htmlbase/HTML/list_33 _【除此外其他都一样】.html
由此我们提取出来的规则就是换为变量值的形式
[url=http://www.dedecms.com/web-art/htmlbase/HTML/list_33_[var]http://www.dedecms.com/web-art/htmlbase/HTML /list_33_[var[/url]:分页].html
而变量起始值是1,结束值是3,就代表1至3的列表页了。
用正则匹配置网址就看本身是否有比较特定的文章网址字符。
下面的html范围就比较重要,采集的实际文章地址就是从这里获取的。
我们看原dede的列表。我们在浏览器里查看源文件。
查找以下代码:
图4
图4
上图中选中部分就是文章列表内容的开始处,而且在整个页面中是唯一的,因此我们就提取到了开始的HTML了
结束的HTML一般可以在列表下面的分页处找到,也是提取在正个页面源码中唯一标识的代码,看下图选中部分:
图5
图5
下面的【手工指定网址】就是你想特别采集什么网址,就直接填上即可。
一,设置采集内容:
本篇将以《HTML语言剖析(六)清单标记》为例子,其链接地址是:
http://www.dedecms.com/web-art/htmlbase/HTML/20060703/30201.html
由于该测试文章没有分页,所以我们的配置选择的是“不分页”,因此,分页链接区域html也可以不用填写任何内容,如下图1所示:
图1
图1
有分页文章的设置方法将会在以后进行介绍。
二,内容字段的设置:
进入这一步,就开始对页面源码进行着重的分析了,采集无非是分析html页面的结构从而获取我们所需的内容。
所以这里就要求我们对HTML代码有一定的认识,最起码你也该看懂html代码的结构。
通过查看页面源文件,我们可以查看到页面的html代码。
1、文章标题:
最简单的方法是直接搜索这个标题在html代码中出现的位置,例如本篇例文的标题是:HTML语言剖析(六)清单标记,因此直接搜索出来在html代码总 总共出现有两处,第一处的代码是
<title>HTML语言剖析(六)清单标记 – 织梦内容管理系统</title>
第二处出现的代码是:
<!–资讯标题–>
<div class=”title”>
<h1>HTML语言剖析(六)清单标记</h1>
</div>
<!–相关信息–>
由上面两处不难得出,第二处对于我们来捕获该文的标题比较方便,因为不用再去写规则过滤掉一些我们不需要的信息。经过再次搜索全文HTML得 出,<h1>和</h1>在文中具有唯一性,因此可以作为获取标题的起止html代码,设置如下图2:
图2
图2
2、文章作者:
如果你不想用该文章上所显示的作者,也可以留空,dede会自动把文章的作者名给你添加上“佚名”
要采集这个文章作者也不难,经过分析后,可以看出文章作者在HTML代码中出现的位置,先看看下图3中选中部分代码
图3
图3
这样文章作者的采集范围我们就可以定下来,其设置如下图4所示:
图4
图4
*若文章作者中有包含超链接,其代码表现形式为“<a href=”” ……>文章作者</a>”,我们也可以采取过滤规则将其过滤掉,其规则如下:
{dede:trim}<a([^>]*)>{/dede:trim}
{dede:trim}</a>{/dede:trim}
设置方法可以见上图4中的过滤规则。
3、文章正文:
要找到文章正文在HTML代码中出现的位置,一个便捷的技巧就是先复制网页中正文的头几个字,然后在html代码中查找,就可以很快定位出来,这也可以方 便我们分析代码。
只要找出文章正文前的唯一性代码和文章结束时的唯一性代码,就可以抓出文章的正文。如下图5所示:
图5
图5
因为本文例文是没有分页内容,所以这里的“分页内容字段”不用选,若你想将文章正文中包含的多媒体资源(如图片、视频等)下载到本地服务器,你可以勾上 “下载字段里的多媒体资源”
过滤规则是比较重要的部分,通过正则规则可以将文章中的广告代码或LJ代码、干扰代码过滤掉,不采集下来,若人家文章中有挂了广告,我想你也不想免费给人 家挂广告吧。
至于过滤规则部分将再以后讲解。
剩下的文章来源,发布时间和录入时间等,都和以上的设置大同小异的,采集与否都无所谓,就看你的需要了。
三,至此,节点和规则的设置都完成了,接下来就是采集,下载和导出(入库)了。
最后再强调一点的就是必须懂HTML代码,最起码得能看懂目标页面的html代码的大概组成,知道文章的内容是存放在哪些代码之间。
下篇预告:进行采集篇,以图文的方式介绍如何进行采集,导出所采集到的数据入库
的写发。这一篇我们将介绍如何进行采集以及采集后的入库。
一,选择节点,进入采集
先在我们刚建立好的采集节点前面打勾,然后点“采集”按钮,如图1
图1
图1
二,采集详细设置
图2
图2
这里可以设置每页采集的数据条数,一般来说不要设置太大,否则有可能导致系统处理不过来而部分采集不到,建议别超过15;线
程数是指每次有多少个线程同时进行采集,线程数的增加可以加快采集速度,但相应的会增加服务器资源的占用,所以请慎用;假
若目标站点有防刷新限制,此处就可以根据目标站点的防刷新限制时间进行设置,假如没有就默认0秒可以了。
附加选项这三个设置从字面上应该可以很容易理解,这就根据你的实际需要进行选择了。
三,采集后的处理
采集完成后,点击“查看种子网址”进入查看采集的结果。
这里罗列出了采集回来的内容。可以点击进去查看采集到的内容有无问题的。具体看图3
图3
图3
温馨提醒:
1、在这个列表中有些数据的是否下载有可能显示的是“未下载”,引起的原因可能是网络的原因引起也有可能是你设置的采集条数
过大导致的。出现这样的情况我们仅需要在上面采集的“附加选项中”选择“仅下载未下载内容”,然后再进行一次采集即可。
2、在“节点的种子网址”列表中点击“[源网址]”可进入查看该条采集到的数据所在的原来页面
3、在“节点的种子网址”列表中点击“内容标题”这一栏的超链接可进入查看采集到的数据是否正确,同时也可以修改里面的内容
,最后记得保存即可,见图4
图4
图4
这里需要注意的是:“dede_archives.sortrank”和“dede_archives.pubdate”这两个字段的内容一般不要修改
4、假如要删除部分不满意的数据,可以在列表中在你要删除的数据前面打勾,然后按“删除所选网址”即可,这里支持批量操作
四,将采集的数据入库
这里有多个入口:
1、在节点管理列表中选择刚才采集的那个节点,然后点击下面的“导出数据按钮”进入入库操作
2、直接点击我们刚才采集的那个节点进入采集内容管理页面,点击右上方的“导出采集内容”按钮即可进入入库操作
3、选择节点后点击“采集”按钮进入采集页面,在右上方有“导出数据”按钮,点击后也可进入入库操作页面
进入后的入库操作页面见图5
图5
图5
首先选择要导入到的栏目,按“请选择”那里即可在弹出的窗口中选择你需要导入的栏目
发布选项这里一般默认即可,除非你不想马上发布。
每批导入默认是30条,这里修改与否都无所谓,因为导入操作的速度还是蛮快的
附带选项一般选“排除重复标题”,至于自动生成HTML那个选项建议先别生成,因为我们还要去批量提取摘要和关键字,这就是后
话了。
上面的配置OK以后,接下来就是按“提交”让系统自己去处理了。完成下面会有提示信息。
到这里,采集教程就基本结束,接下来我会介绍一些过滤规则和分页采集教程。喜欢的朋友敬请关注。
dede的过滤规则并不难写,其写法如下面
{dede:trim}这里就是要过滤的内容{/dede:trim}
如果你要过滤的内容比较简单的代码,完全可以直接在“{dede:trim}”和“{/dede:trim}”之间写上,如果比较复杂的就要用到正则 了。
1、例如采集中去除内容里的超链接的规则如下:
{dede:trim}<a([^>]*)>{/dede:trim}
{dede:trim}</a>{/dede:trim}
假如要将所有超链接内容都去除,规则是:{dede:trim}<a([^>]*)>([^<]*)</a> {/dede:trim}
这两个规则的不同通过下面代码来解释
例如文章代码中包含着如下内容:<a href=”#”>超链接</a>
通过第一个规则,我们采集来的结果是:超链接
通过第二个规则,我们采集来的结果是:空白,即是将所有内容都过滤掉了。
2、过滤广告
对于广告来说,过滤规则就得针对html中看到的内容使用规则了,例如某些广告仅仅是引用某个JS文件,例如
<script src=’/plus/ad_js.php?aid=4′ language=’JavaScript’></script>
这样的规则只需
{dede:trim}<script(.*)>{/dede:trim}
{dede:trim}</script>{/dede:trim}
如果某些广告的内容是JS代码写在<script></script>区间里的,例如GG的广告,那么过滤规则应该是:
{dede:trim}<script>(.*)</script>{/dede:trim}
3、下面是一些常识用的过滤规则
{dede:trim}<!–(.*)–>{/dede:trim}
{dede:trim}<select([^>]*)>([^>]*)</select>{/dede:trim}
{dede:trim}<option([^>]*)>([^>]*)</option>{/dede:trim}
{dede:trim}<select([^>]*)>{/dede:trim}
{dede:trim}</select>{/dede:trim}
{dede:trim}<param([^>]*)>{/dede:trim}
{dede:trim}<embed([^>]*)>([^>]*)</embed>{/dede:trim}
{dede:trim}<embed([^>]*)>{/dede:trim}
{dede:trim}</embed>{/dede:trim}
{dede:trim}<object([^>]*)>([^>]*)</object>{/dede:trim}
{dede:trim}<object([^>]*)>{/dede:trim}
{dede:trim}</object>{/dede:trim}
{dede:trim}<OBJECT([^>]*)>([^>]*)</OBJECT>{/dede:trim}
{dede:trim}<OBJECT([^>]*)>{/dede:trim}
{dede:trim}</OBJECT>{/dede:trim}
{dede:trim}<iframe([^>]*)>([^>]*)</iframe>{/dede:trim}
{dede:trim}<iframe([^>]*)>{/dede:trim}
{dede:trim}</iframe>{/dede:trim}
{dede:trim}<IFRAME([^>]*)>([^>]*)</IFRAME>{/dede:trim}
{dede:trim}<IFRAME([^>]*)>{/dede:trim}
{dede:trim}</IFRAME>{/dede:trim}
{dede:trim}<font([^>]*)>([^<]*)</font>{/dede:trim}
{dede:trim}<font([^>]*)>{/dede:trim}
{dede:trim}</font>{/dede:trim}
{dede:trim}<a([^>]*)>([^<]*)</a>{/dede:trim}
{dede:trim}<a([^>]*)>{/dede:trim}
{dede:trim}</a>{/dede:trim}
{dede:trim}<td([^>]*)>([^>]*)</td>{/dede:trim}
{dede:trim}<td([^>]*)>{/dede:trim}
{dede:trim}</td>{/dede:trim}
{dede:trim}<tr([^>]*)>([^>]*)</tr>{/dede:trim}
{dede:trim}<tr([^>]*)>{/dede:trim}
{dede:trim}</tr>{/dede:trim}
{dede:trim}<tbody([^>]*)>([^>]*)</tbody>{/dede:trim}
{dede:trim}<tbody>{/dede:trim}
{dede:trim}</tbody>{/dede:trim}
{dede:trim}<table([^>]*)>([^>]*)</table>{/dede:trim}
{dede:trim}<table([^>]*)>{/dede:trim}
{dede:trim}</table>{/dede:trim}
{dede:trim}<span([^>]*)>{/dede:trim}
{dede:trim}</span>{/dede:trim}
{dede:trim}</IFRAME>{/dede:trim}
{dede:trim}<script>(.*)</script>{/dede:trim}
{dede:trim}<script(.*)>{/dede:trim}
{dede:trim}</script>{/dede:trim}
———————————–
对于下面这些规则就请慎用
———————————–
{dede:trim}<div(.*)>{/dede:trim}
{dede:trim}</div>{/dede:trim}
{dede:trim}<stong>{/dede:trim}
{dede:trim}</stong>{/dede:trim}
{dede:trim}<div(.*)>(.*)</div>{/dede:trim}
{dede:trim}<center(.*)>{/dede:trim}
{dede:trim}</center>{/dede:trim}
{dede:trim}<p(.*)>{/dede:trim}
{dede:trim}</p>{/dede:trim}
{dede:trim}<span(.*)>{dede:trim}
{dede:trim}</span>{dede:trim}
{dede:trim}<img(.*)>{/dede:trim}
{dede:trim}<div(.*)>{/dede:trim}
{dede:trim}</div>{/dede:trim}
以上就是本篇要介绍的内容,正则也许并不是每处都用得上,但当你了解其写法后,自己也可以写出一些更加适合自己使用的规则出来。
接下来就以一个例子来分析,本次的例子网址是:
http://www.ladysfashion.cn/dress/dapei/20080321/1319.html
1、打开本文例子网址,把页面拉到下面,可以看到其分页,见下面图1:
图1
图1
这是典型的DEDE分页,有上下页,也列出了所有的分页。对于这种分页,我们在采集规则时,在“文档是否分页”一项中选择的是“全部列出的分页列表”。例 如某些文档的翻页仅有上下也方式或者仅仅列出部分页码,其余内容用“…”或“更多”这种方式,那这项应选择的是“上下页形式或不完整的分页列表”。
对于分页类型的判断,我们应当多打开几个文章看看其翻页方式,再来决定选择分页方式,特别有些文章仅有单页并没有多页内容,他的翻页也就相应的没有,往往 我们很容易的以为他的文章并没有分页,导致某些有分页的文章采集不到多页内容。分页方式的选择决定了采集回来的内容的完整性。
下面以一个错误的例子看看选择错误导致采集回来的内容重复:
在采集本文例子页面的时候,这里我选择的是“上下页形式或不完整的分页列表”,测试的时候是正常可以采集到内容,但当真正采集的时候,发觉采集回来的内容 重复了,采集回来的结果看下图2:
图2
图2
若将上面例子的方式改为“全部列出的分页列表”,这样采集回来的结果见下图3:
图3
图3
从图2跟图3的对比,后者不会产生重复内容,而且在文章首行也不会多出“#e#”这个来。
举出这两个例子也是为说明此处选择的重要性。
2、分页链接区域匹配规则
这部分的选择也是有一定的技巧。假如有些文章有单页形式,也有多页形式,这时我们应打开有多页的文章 ,然后查看其源文件。
例如本文例子,我们首先要找到其分页区域HTML代码,见下图4选中部分:
图4
图4
接下来是选出具有唯一标识的代码作为分页链接区域的起始HTML,这点类似于其他部分的采集。本文例子的配置如下图5:
图5
图5
3、规则写好以后,在“采集节点管理”页面中的“测试”按钮可以测试采集规则能否采集到内容。但对于分页采集,该功能并不能测试出分页采集规则写得对不 对。所以最好的方式是把采集规则的来源网址中分页变量起始值改为1页,然后实际采集,再看看采集回来的内容是否正确,若有错误就修改分页采集部分,再清空 节点采集到的内容,再采集,如此反复直至完美为止。
至此,采集教程也就告一段落了,也许以后有时间johnny会再整理出采集模型的相关教程。若有什么问题,欢迎到本站给我留言一起研究学习或者到dede 官方论坛去交流,那里的高手很多。