scrapy 有没有一种方法可以用一个Crawl.runner / process运行两个spider,并将结果保存在两个单独的文件中?

hgncfbus  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(118)

我有两个scrappy蜘蛛在两个不同的脚本

Spiders
 Spider1.py
 Spider2.py

Spider中的代码示例如下:

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()

我从一个单独的脚本运行两个spider,代码如下:

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()

当我尝试运行spider时,Spider1运行并将结果保存在相应的csv文件中,但当执行spider2时,我得到以下错误:
twisted.internet.error.ReactorNotRestartable
对于如何修复代码以便两个spider运行并将结果保存在单独的文件(spider1.csv,spider2.csv)中,有什么想法吗?
这真的可能吗?

dba5bblo

dba5bblo1#

我相信你可以通过在每个蜘蛛中创建一个这样的cutom设置来做到这一点:
蜘蛛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'
    }
  }
}

相关问题