【问题标题】:Passing a request to a different spider将请求传递给不同的蜘蛛
【发布时间】:2017-08-09 08:20:18
【问题描述】:
我正在开发一个使用 2 个不同蜘蛛的网络爬虫(使用 scrapy):
- 非常通用的爬虫,可以使用大量启发式方法来抓取(几乎)任何网站以提取数据。
- 能够爬取特定网站 A 的专用爬虫由于网站的特殊结构(必须爬取该网站)而无法用通用爬虫爬取。
到目前为止一切都很好,但是网站 A 包含指向其他“普通”网站的链接,这些网站也应该被抓取(使用蜘蛛 1)。 是否有一种 Scrappy 方式将请求传递给蜘蛛 1?
我想到的解决方案:
- 将所有功能移至spider 1。但这可能会变得非常混乱,spider 1 的代码已经很长而且很复杂,如果可能的话,我希望将这个功能分开。
- 按照Pass scraped URL's from one spider to another 中的建议保存到数据库的链接
有没有更好的方法?
【问题讨论】:
标签:
python
python-3.x
scrapy
【解决方案1】:
我遇到过这样一个案例,一个 spyder 在第一页中检索 URL 地址,然后从那里调用第二个进行操作。
我不知道您的控制流程是什么,但取决于它,我只会在报废新 url 或报废所有可能的 url 后及时调用第一个 spyder。
您是否有 n°2 可以检索同一网站的 URL 的情况?在这种情况下,我将存储所有 url,将它们作为列表排序在任一蜘蛛的字典中,然后再次滚动,直到列表中没有新元素可供探索。在我看来,这使它变得更好,因为它更灵活。
及时调用可能没问题,但根据您的流程,它可能会降低性能,因为多次调用相同的函数可能会浪费大量时间来初始化事物。
您可能还希望使分析功能独立于蜘蛛,以便在您认为合适的情况下使它们可供两者使用。如果您的代码非常长且复杂,它可能有助于使其更轻、更清晰。我知道这样做并不总是可以避免的,但这可能值得一试,而且您最终可能会在代码级别提高效率。