当我遇到这个设计问题时,我一直在php中构建一个刮刀和蜘蛛。我想知道在制作一个分离爬行和抓取任务的系统(就像大多数专业系统似乎那样)和在蜘蛛爬行时刮擦的系统之间的权衡。我唯一能想到的是,通过将其拆分并使用队列,您可以通过使用几个需要向队列询问下一页要抓取的刮刀来更好地并行化任务。任何人都可以想到其他权衡并向我解释这些通常被分成两个程序的主要原因吗?
注意:在两种情况下,抓取的顺序都是相同的,唯一的区别是页面被拉动时。
答案 0 :(得分:2)
爬虫检索页面,蜘蛛处理它们。如果将这些任务分开,则可以更改一个任务的实现而不更改另一个任务。这就是为什么它们是分开的:它只是很好的软件设计。
您给出的示例是一个很好的例子:如果您将检索与单个类/模块/程序/函数/中的处理相结合,那么检索页面的方式会有任何变化(例如,并行检索,通过代理检索等) )需要重写整个程序。
这是另一个:如果你想处理不同类型的数据(例如rss feed而不是html页面),你需要从头开始编写你的整个scraper,你不能重复使用你在页面检索上所做的任何工作。