【问题标题】:Passing a request to a different spider将请求传递给不同的蜘蛛
【发布时间】:2017-08-09 08:20:18
【问题描述】:

我正在开发一个使用 2 个不同蜘蛛的网络爬虫(使用 scrapy):

  1. 非常通用的爬虫,可以使用大量启发式方法来抓取(几乎)任何网站以提取数据。
  2. 能够爬取特定网站 A 的专用爬虫由于网站的特殊结构(必须爬取该网站)而无法用通用爬虫爬取。

到目前为止一切都很好,但是网站 A 包含指向其他“普通”网站的链接,这些网站也应该被抓取(使用蜘蛛 1)。 是否有一种 Scrappy 方式将请求传递给蜘蛛 1?

我想到的解决方案:

  1. 将所有功能移至spider 1。但这可能会变得非常混乱,spider 1 的代码已经很长而且很复杂,如果可能的话,我希望将这个功能分开。
  2. 按照Pass scraped URL's from one spider to another 中的建议保存到数据库的链接

有没有更好的方法?

【问题讨论】:

    标签: python python-3.x scrapy


    【解决方案1】:

    我遇到过这样一个案例,一个 spyder 在第一页中检索 URL 地址,然后从那里调用第二个进行操作。
    我不知道您的控制流程是什么,但取决于它,我只会在报废新 url 或报废所有可能的 url 后及时调用第一个 spyder。
    您是否有 n°2 可以检索同一网站的 URL 的情况?在这种情况下,我将存储所有 url,将它们作为列表排序在任一蜘蛛的字典中,然后再次滚动,直到列表中没有新元素可供探索。在我看来,这使它变得更好,因为它更灵活。

    及时调用可能没问题,但根据您的流程,它可能会降低性能,因为多次调用相同的函数可能会浪费大量时间来初始化事物。

    您可能还希望使分析功能独立于蜘蛛,以便在您认为合适的情况下使它们可供两者使用。如果您的代码非常长且复杂,它可能有助于使其更轻、更清晰。我知道这样做并不总是可以避免的,但这可能值得一试,而且您最终可能会在代码级别提高效率。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多