2

我一直在用PHP构建一个刮板和蜘蛛,当我遇到这个设计问题时。我想知道在建立一个将抓取和抓取任务分开的系统(如大多数专业系统似乎这样做)和蜘蛛抓取时的抓取任务之间的平衡。我唯一能想到的是,通过分割并使用一个队列,你可以更好地平行化任务,方法是让几个刮刀只需要询问队列中的下一页是什么。任何人都可以想到其他的权衡,并向我解释这些通常分为两个程序的主要原因?蜘蛛和刮板架构

注意:两种情况下的抓取顺序是相同的,唯一的区别是当页面被拉出时。

+0

“这些通常分为两个程序的主要原因” - 因为它是不同的任务? – zerkms 2012-04-16 04:03:15

+0

在移动到页面中的链接之前,您可以轻松地让蜘蛛拉动并处理页面,但大多数蜘蛛只是将链接放入另一个程序(刮板)的队列中以便稍后进行。如果有什么更复杂的并涉及更多的页面请求,但这是大多数系统工作的方式。为什么? – hackartist 2012-04-16 04:32:18

回答

2

爬行程序检索页面,蜘蛛程序处理它们。如果将这些任务分开保存,则可以更改一个任务的执行而不更改其他任务。这就是它们分离的原因:它只是很好的软件设计。你给出的例子是一个很好的例子:如果你将检索与单个类/模块/程序/函数/任何处理结合起来,任何页面检索方式的改变(例如并行检索,通过代理检索,等)需要重写整个程序。

下面是另一个:如果你想处理不同类型的数据(例如rss feeds而不是html页面),你需要从头开始编写整个刮板,并且不能重复在页面检索中做的任何工作。

+0

谢谢你的回答。我没有想过如何在不必重写解析逻辑的情况下使用多个页面格式的刮板。我原本是以这种分开的方式编写我的扫描程序,但是当爬行程序移动的速度比解析程序的速度快得多时,并且导致我的队列备份,所以朋友曾建议我简单地爬行并同时拉降低复杂性。我知道从概念上讲,让它们分离开发是有意义的,但我也在寻找性能方面的原因。谢谢。 – hackartist 2012-04-16 07:21:29