2017-08-09 68 views
1

我工作的网络爬虫(使用scrapy)使用2个不同的蜘蛛:传递请求到不同的蜘蛛

  1. 非常普通的蜘蛛,可以使用大量抓取(几乎)所有网站的启发式提取数据。
  2. 能够抓取特定网站的专用蜘蛛因网站特殊结构(该网站必须被抓取)而无法使用通用蜘蛛抓取。

目前一切都很好,但网站A包含其他应该被刮掉的“普通”网站的链接(使用蜘蛛1)。 有没有Scrappy的方式将请求传递给蜘蛛1?

解决方案我想过:

  1. 移动所有功能蜘蛛1.但是,这可能会带来麻烦,蜘蛛1的代码已经是很长的,复杂的,我想保持这种功能分开,如果可能的话。
  2. 保存链接到数据库就像是在Pass scraped URL's from one spider to another

有没有更好的办法建议?

回答

1

我遇到过这样的情况,一个Spyder在第一页中检索URL地址,第二个从那里调用来操作。
我不知道你的控制流是什么,但取决于它,我只是在报废一个新的url时,或者在废除所有可能的url后,立即调用第一个spyder。
您是否有这样的情况:n°2可以检索同一网站的网址?在这种情况下,我会存储所有的URL,将它们按照列表的形式排列成一个蜘蛛的字典,并再次滚动,直到没有新的元素留给要浏览的列表。在我看来,这更好,因为它更灵活。

即时调用可能没问题,但根据您的流程,它可能会使性能变差,因为多次调用相同的函数可能会失去大量初始化事件的时间。

您可能还想独立于蜘蛛制作分析功能,以便在您认为合适的情况下使它们都可用。如果你的代码很长很复杂,它可能有助于使它更轻,更清晰。我知道这样做并不总是可以避免的,但这可能值得一试,并且最终可能会在代码级别更高效。