这样的爬虫思路要怎么设计??

我有一个mongodb的数据库.

而有一只爬虫,每天往这个数据库里面抓内容加进去....
而另外一只爬虫,是负责给这些数据打标签,就是抓进去的数据,判断是垃圾数据,就打上垃圾,判断是好的数据,就打上优质 ,类似这种思路

而我现在有另外3-4个网站,网站的文章数据都是来自这个数据库,目的就是发现这个数据库只要有新的并且标签带有优质的数据,就马上发布到网站上...

那么我在设计爬虫的时候,如何做到最高效?
就是边采集的时候,边打标签,边发布数据??

我现在基本就是这样的流程:


for 采集数据 in 采集数据集合:
    给采集数据打上标签
        if 优质数据
            发布到网站上

不知道这样的伪代码大家看得懂吗?
但是用python 是线性执行的.可能效率比较差( 因为打标签 和发布的网站时间比较慢 )
要怎么设计呢?
有点乱,能看得懂的应该都是比较懂我的人

阅读 5.1k
4 个回答

高估了自己的数据量,低估了python性能。
不用设计,花半天看scrapy文档,官方例子流程就符合你了。

发布订阅模式,有优质内容就发布一个 "good_content" 事件,然后其他的网站订阅这个事件,这样不管你有多少网站,整个系统都是松耦合的。

首先,不用两只爬虫,一只爬虫爬去内容的时候,就可以分辨出是优质还是劣质内容,是的话,就直接发布 "good_content" 事件,你的爬虫系统就这么简单。

订阅了 "good_content" 的系统收到该事件,就会自动更新内容。具体是用什么来实现发布订阅模式,方法有很多。如果是在一个项目中,自己写代码实现一个就行了;如果不是一个项目,就用消息队列,或者Redis也有提供发布订阅的功能(据说不太好用,哈哈~)。

有问题可以继续讨论。

采集和发布分开来设计会比较好。
你负责采集,我负责发布。条理清晰。互不干涉。
你采集慢不关我的事,我发布慢也不关你的事。你把两个捆在一起,我觉得复杂化了。
没什么效率不效率。从你的描述上看,我没看出到底出了什么问题。

生产者消费者模式,采集完数据扔到队列里去,打标的作为消费者读取队列,如果优秀就发布。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题