¿Cómo pasar configuraciones personalizadas a través de CrawlerProcess en scrapy?

Tengo dos CrawlerProcesses, cada uno está llamando a una araña diferente. Quiero pasar la configuración personalizada a uno de estos procesos para guardar la salida de la araña a csv, pensé que podría hacer esto:

storage_settings = {'FEED_FORMAT': 'csv', 'FEED_URI': 'foo.csv'} process = CrawlerProcess(get_project_settings()) process.crawl('ABC', crawl_links=main_links, custom_settings=storage_settings ) process.start() 

y en mi araña los leo como argumento:

  def __init__(self, crawl_links=None, allowed_domains=None, customom_settings=None, *args, **kwargs): self.start_urls = crawl_links self.allowed_domains = allowed_domains self.custom_settings = custom_settings self.rules = ...... super(mySpider, self).__init__(*args, **kwargs) 

pero ¿cómo puedo informar a mi archivo de configuración del proyecto “settings.py” acerca de esta configuración personalizada? No quiero codificarlos, quiero que se lean automáticamente.

No puede decirle a su archivo acerca de estas configuraciones. Quizás esté confundido entre la configuración del rastreador y la configuración de la araña. En scrapy, los parámetros de alimentación a partir del momento de este envío deben pasar al proceso del rastreador y no a la araña. Debe pasarlos como parámetros a su proceso de rastreador. Tengo el mismo caso de uso que tú. Lo que hace es leer la configuración actual del proyecto y luego anularla para cada proceso del rastreador. Por favor vea el código de ejemplo a continuación:

 s = get_project_settings() s['FEED_FORMAT'] = 'csv' s['LOG_LEVEL'] = 'INFO' s['FEED_URI'] = 'Q1.csv' s['LOG_FILE'] = 'Q1.log' proc = CrawlerProcess(s) 

Y luego su llamada a process.crawl() no es correcta. El nombre de la araña se debe pasar como el primer argumento como una cadena, como este: process.crawl('MySpider', crawl_links=main_links) y, por supuesto, MySpider debe ser el valor dado al atributo de nombre en su clase de araña.

No pase la configuración al método crawl() . Y también pase el nombre de clase de su araña como primer argumento para crawl() .

 from my_crawler.spiders.my_scraper import MySpider from scrapy.crawler import CrawlerProcess from scrapy.settings import Settings from scrapy.utils.project import get_project_settings from twisted.internet import reactor process = CrawlerProcess(get_project_settings()) process.crawl(MySpider(), crawl_links=main_links) process.start()