Python 3.x 如何在CrawlerProcess Scrapy中为两个不同的爬行器指定不同的进程设置?

Python 3.x 如何在CrawlerProcess Scrapy中为两个不同的爬行器指定不同的进程设置?,python-3.x,web-scraping,scrapy,web-crawler,Python 3.x,Web Scraping,Scrapy,Web Crawler,我有两个并行执行的spider。我使用了CrawlerProcess实例及其crawl方法来实现这一点。但是,我希望为同一进程中的每个spider指定不同的输出文件,即提要URI。我尝试循环蜘蛛并运行它们,如下所示。尽管生成了两个不同的输出文件,进程在第二个spider完成执行后立即终止。如果第一个爬行器在第二个爬行器之前完成爬行,我将获得所需的输出。但是,如果第二个爬行器首先完成爬行,那么它不会等待第一个爬行器完成。我该怎么解决这个问题呢 from scrapy.utils.project i

我有两个并行执行的spider。我使用了
CrawlerProcess
实例及其
crawl
方法来实现这一点。但是,我希望为同一进程中的每个spider指定不同的输出文件,即
提要URI
。我尝试循环蜘蛛并运行它们,如下所示。尽管生成了两个不同的输出文件,进程在第二个spider完成执行后立即终止。如果第一个爬行器在第二个爬行器之前完成爬行,我将获得所需的输出。但是,如果第二个爬行器首先完成爬行,那么它不会等待第一个爬行器完成。我该怎么解决这个问题呢

from scrapy.utils.project import get_project_settings
from scrapy.crawler import CrawlerProcess

setting = get_project_settings()
process = CrawlerProcess(setting)

for spider_name in process.spider_loader.list():
    setting['FEED_FORMAT'] = 'json'
    setting['LOG_LEVEL'] = 'INFO'
    setting['FEED_URI'] = spider_name+'.json'
    setting['LOG_FILE'] = spider_name+'.log'
    process = CrawlerProcess(setting)
    print("Running spider %s" % spider_name)
    process.crawl(spider_name)

process.start()
print("Completed")
根据scrapy的说法,对多个爬行器使用单个
爬行器过程应如下所示:

import scrapy
from scrapy.crawler import CrawlerProcess

class Spider1(scrapy.Spider):
    ...

class Spider2(scrapy.Spider):
    ...

process = CrawlerProcess()
process.crawl(Spider1)
process.crawl(Spider2)
process.start()
设置。。基于每个蜘蛛的设置可以使用

Scrapy有一组模块,不能按每个蜘蛛设置(仅按蜘蛛设置)
爬网进程


使用日志记录、SpiderLoader和twisted Reactor相关设置的模块-在Scrapy read spider
自定义设置之前已初始化

当您从命令行工具调用
scrapy crawl….
时,实际上您为在命令参数上定义的单个爬行器创建了一个爬行器

第二个spider完成执行后,进程立即终止


如果您使用的是以前由
scrapy crawl启动的相同爬行器版本…
这是不可能的。

您正在覆盖循环中的
进程
对象。请查看线程,否则我如何将输出写入两个单独的Json文件?请参阅本文,如果我执行setting.update({'FEED_FORMAT':'Json','FEED_URI':spider_name+“.Json','LOG_FILE':spider_name+'.LOG','LOG_LEVEL':'INFO'),我的代码就无法实现这一点它单独在循环中工作良好,并生成适当的json输出。但是日志文件不正确。有没有办法使日志文件正确无误?我怎样才能修改上面的代码来创建单独的日志呢?在这种情况下,日志不能是单独的。在此配置中,每个crawlerprocess将有一个单独的logger对象(由于在零碎的源代码中记录实现的细节)。唯一可靠的方法是:1使用
scrapy crawl..
命令行工具分别为每个爬行器执行此操作,就像您之前所做的那样。2.通过创建两个单独的脚本并将执行拆分为两个爬虫进程(几乎相同)。