【问题标题】:Spiders and Scrapers Architecture蜘蛛和刮板架构
【发布时间】:2012-04-16 03:28:47
【问题描述】:

当我遇到这个设计问题时,我一直在用 php 构建刮板和蜘蛛。我想知道在制作一个分离爬行和抓取任务的系统(就像大多数专业系统似乎做的那样)和一个在蜘蛛爬行时抓取的系统之间的权衡。我唯一能想到的是,通过将其拆分并使用队列,您可以通过多个只需要询问队列要抓取的下一页的抓取器来更好地并行化任务。谁能想到其他权衡并向我解释这些通常分为两个程序的主要原因?

注意:两种情况下的爬取顺序是一样的,唯一的区别是页面被拉取的时间。

【问题讨论】:

  • “这些通常被分成两个程序的主要原因”——因为它是不同的任务?
  • 你可以很容易地让蜘蛛抓取并处理页面,然后再转到页面中的链接,但是大多数蜘蛛只是将链接放入队列中等待另一个程序(刮板)来稍后获得。如果有的话,这会更复杂并涉及更多页面请求,但这是大多数系统的工作方式。为什么?

标签: php architecture parallel-processing web-crawler web-scraping


【解决方案1】:

爬虫检索页面,蜘蛛处理它们。如果您将这些任务分开,您可以更改一个任务的实现而不更改另一个任务。这就是他们分开的原因:这只是好的软件设计。

您给出的示例是一个很好的示例:如果您将检索与单个类/模块/程序/函数/任何内容中的处理结合起来,那么检索页面的方式会发生任何变化(例如,并行检索、通过代理检索等) ) 需要重写整个程序。

还有一个问题:如果您想处理不同类型的数据(例如 rss 提要而不是 html 页面),您需要从头开始编写整个抓取工具,并且您不能重复使用您在页面检索方面所做的任何工作。

【讨论】:

  • 感谢您的回答。我没有想过如何在无需重写解析逻辑的情况下将刮板用于多种页面格式。我最初以这种分离的方式编写了我的爬虫,但是当爬虫的移动速度比解析器跟上的快得多并导致我的队列备份时遇到问题,所以一个朋友建议我简单地同时爬取和拉取降低复杂性。我知道从概念上讲,将它们分开以进行开发是有意义的,但我也在寻找性能方面的原因。谢谢。
猜你喜欢
  • 2015-04-03
  • 2018-08-17
  • 1970-01-01
  • 2017-09-11
  • 2016-03-23
  • 1970-01-01
  • 2012-01-23
  • 2011-02-20
  • 1970-01-01
相关资源
最近更新 更多