Rain

前尘旧事,几孤风月,似水长眠; 世无定事,问尽风流,只为一笑

玩转Drupal大魔方-记开发一个drupal数据采集模块

Drupal数据采集?在讲讲这个或者是天使或者是魔鬼的模块之前,先分享一些自动维护站点的经验。

a)简单的维护

如果您的数据并没有多大的时效性,你可以把所有数据放到数据库里,发布其中的一大部分,留一小部分,比如(3000条)用着每天发布10条,这样你可以做到在一年内不太需要更新内容。做这个,drupal的 cron+ schema  即可,您可以在数据库中将未发布的节点做个简单的算法。比如说 现在的时间+(节点max-节点min)整除(计划发布的天数)*76400 就是您默认发布的日期。

b)实时的维护

如果您的数据或者资讯,服务是实时的,而对于数据量大,用户不够活跃的网站来说,您不太可能事必攻亲地每天去更新节点,尤其是那些自由职业者与小企业主,他们更希望把生命浪费在更美好的事情之上。这时候您要做的就是做一个数据采集发布模块了。在国内的采集器中,火车头是我最喜欢使用的。您可以通过火车头采集到这个世界上任何成系列的实时数据合并至您的服务器中,您需要做的只是做一个通用的drupal发布器,通过授权的用户+drupal在线发布+一个任务管理系统按计划整点对站点进行更新,当然,如果您对在线发布制作比较陌生,我建议您直接通过devel模块更踪数据提交过程直接对数据库进行批量更新也可以。

c)让你的用户来维护

当您的网站不缺少用户,但是缺少内容的时候,我建议您可以通过让用户来维护您的站点的任务。drupal之所以讨人喜欢,是因为他的地基非常好,要找什么样的应用,你不单是要去找模块,更重要的是,那些人帮你实现了做事情的方法(函数).如果碰到好的建筑师,他就能象玩魔方一样,快速变出您所需要的效果.

好了,摩天大楼也是有地基的,做这样一个模块,并不是异想天开。因为手上有一个关于行政机构的wiki网站,用了一些drupal的模块构架,站点里大概有1万个分类节点与30万个内容节点,老实说,我一直想把内容 填充起来,但是费神,。怎么办?因为这个网站的流量比较高,用户访问的比我多。我想,或者我可以找到一个办法,当用户点击我的网站时,不管他愿意不愿意,他都帮我自动 填充了该页面的内容,又或者,当三晚半晚服务器没事干的时候,让他去采集那些内容标记为空的节点吧,象建立索引样,一晚上1000个,这样一年时间就可以全部填充好了。

是不是很无聊?如果习惯操作小站点,小数据的的你。也许吧,但是对那些志向远大的SEO工作者,或者做小投资性的希望快速吸引人气的小型企业主来说,应该算是天使模块吧。这个想法通过模块实现,从开发,测试到应用足足花了两天时间。一堆废话之后,总是要进入正题的。

drupal数据采集模块

提要:我已经为我的网站建立了数万计的空的节点,他们仅仅提供了一个有用的标题。内容什么也没有。

需求:当用户点击这些节点时,网站自动去其它网站采集与节点相关的数据并填充好内容。这样,下一个用户点击这个节点时,他就变成有内容的了。或者应该对那位第一次点击用户说声对不起吧,他居然看不到自己作出的贡献。

分析:drupal有个很好的沟子叫hook_exit,就是用户下载完页面的内容后服务器需要做的工作。对了,就是他了。drupal的节点中还有一个备用的字段叫moderate,作者设计 的本意就是叫开发者人随便用。好,就用这个函数了。先将那先空节点全部置为1,一填充好内容。就叫他置为0

那么流程就是 用户点击-将任务放入队列-站点下载其它网站内容-将下载的内容分析处理后填充节点内容

采集图解:

  • 要采集内容,drupal有个函数叫drupal_http_reuqest就是干这个的,aggregator模块就是建立在这个基础上的。要对内容进行分析,当然是正则表达式了。在采集模块中,我试图加入更多的函数如 preg_replace等。以方便用户进行更精确的匹配。当然,首选还是preg_match_all.
  • 要采集内容当然得有网址,不用多说,把标题用$title替换掉即可。对于不同的采集回来的编码,您可以选择一个编辑,否则,采集回来的内容就是乱码了。
  • 利用模式只采集那些自己需要的内容。同时,对内容中的字符还可以选择是否去掉htmk标签或者保留什么标签,对最终生成的内容进行什么样的替换。

 采集图解

发布图解:

  • 您有两种方式来决定什么时候开始采集,一种是当用户访问时直接采集,一种是设置cron运行的时候采集或者两种一起用。我相信我不需要一年就可以更新好全部节点了。.
  • 并不是每个网站都让你采用多线程不断的抓取数据,所以您最好设置一个时间间隔以免被封IP。
  • 当然,您还可以设置除了更新节点外,对那些分类的描述也一并抓取,比如上百度百科抓名词解释。

好了,万事具备。只欠一次又一次的测试与修改了。当然,对于这些网络之间抓取的事儿,还需要有更详细的debug数据才能更好的测试模块吧,所以,我又加上了一些测试相关的内容,争取在前台就搞定所有工作。

对开发者来说,可以 自己把网页的源码放到测试内容里,然后利用设置进行模拟测试,也可以通过实时取一个网站的节点进行网址测试。所有记录都可以记录在watchdog里面,出现什么问题,是200,303,403,还是307,都一清二楚。

如果把这个模块定为1.0版本,我已经想到了很多2.0的内容,可以做成一个成熟的web在线采集模块,而不仅仅限于搜索引擎,有兴趣的朋友可以对此进行扩充。不过,对我来说,这个1.0已经够用了,等有时间吧。

最后,就是成果展示了,我下午把模块放到站点里,http://www.136law.com 查看watchdog,欣慰中,有兴趣的朋友可以到站点里找个比较冷门的没人用过的node,应该还有30万个吧,打开,看着没内容,马上刷新一下,看看有没有惊喜等你呐。。。。

 

附件大小
aggregator.gif5.75 KB
aggregator2.gif4.12 KB
publish.gif4.04 KB
test.gif2.95 KB
result.gif7.22 KB
粤ICP备06043998号 | 未经站长同意,请勿随意转载本站内容 | 站点地图 | 友情链接 | 与我联系 | QQ:2 1 0 7 3 4 5 2