将请求传递给另一个蜘蛛

时间:2017-08-09 08:20:18

标签: python python-3.x scrapy

我正在使用使用2种不同蜘蛛的网络抓取工具(使用 scrapy ):

  1. 非常通用的蜘蛛,可以使用一堆启发式方法(几乎)抓取任何网站来提取数据。
  2. 能够抓取特定网站的专用蜘蛛由于网站的特殊结构(该网站必须被抓取),无法使用通用蜘蛛进行抓取。
  3. 到目前为止,一切运作良好,但网站A包含指向其他的链接,#34;普通"应该刮掉的网站(使用蜘蛛1)。 是否有Scrappy方法将请求传递给spider 1?

    我想到的解决方案:

    1. 将所有功能移至蜘蛛1.但是这可能会非常混乱,蜘蛛1代码已经非常漫长和复杂,如果可能的话,我希望将此功能分开。
    2. 保存Pass scraped URL's from one spider to another
    3. 中建议的数据库链接

      有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

我遇到了这样的情况,一个spyder在第一页中检索到URL的地址,第二个从那里调用来操作。
我不知道你的控制流程是什么,但是根据它,我只是在废弃新网址或者删除所有可能的网址后及时调用第一个spyder。 您是否有n°2可以检索同一网站的URL的情况?在这种情况下,我会存储所有网址,将它们排序为任一蜘蛛的dict中的列表,然后再次滚动,直到没有新元素留给列表进行探索。在我看来,这更好,因为它更灵活。

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

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