有没有办法使用 Crawl.runner / 进程运行两个蜘蛛并将结果保存在两个单独的文件中?

问题描述 投票:0回答:1

我有两个不同脚本的 scrapy 蜘蛛

Spiders
 Spider1.py
 Spider2.py

蜘蛛中的代码示例如下:

from scrapy.crawler import CrawlerRunner
from twisted.internet import reactor

   class Spider(scrapy.spider):
     # some code

   runner = CrawlerRunner(
       settings={'FEEDS': 
       {'../input/next.csv': {'format': 
        'csv'}}})
   runner.crawl(Spider)
   d = runner.join()
   d.addBoth(lambda _: reactor.stop())
   reactor.run()

我使用以下代码从单独的脚本运行两个蜘蛛:

import runpy as r



def run_webscraper():
       r.run_path(path_name='Spider1.py') 
       r.run_path(path_name='Spider2.py')
       return
   if __name__ == '__main__':
       run_webscrapper()

当我尝试运行蜘蛛时,Spider1 运行并将结果保存在相应的 csv 文件中,但是当执行 Spider2 时,我收到以下错误:

twisted.internet.error.ReactorNotRestartable

关于如何修复代码以便两个蜘蛛运行并将其结果保存在单独的文件(spider1.csv、spider2.csv)中,有什么想法吗?

这真的可能吗?

python process scrapy web-crawler twisted
1个回答
0
投票

我相信您可以通过在每个蜘蛛中创建一个自定义设置来做到这一点,如下所示:

蜘蛛1:

class Spider1(scrapy.Spider):
  name='spider1'
  custom_settings = {
    'FEEDS': {
      'spider1.csv': {
        'format': 'csv'
      }
    }
  }

蜘蛛2:

class Spider2(scrapy.Spider):
name='spider2'
custom_settings = {
  'FEEDS': {
    'spider2.csv': {
      'format': 'csv'
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.