Ejecución de Scrapy desde un script – Se bloquea

Estoy tratando de ejecutar scrapy desde un script como se discute aquí . Se sugirió usar este fragmento, pero cuando lo hago cuelga indefinidamente. Esto fue escrito de nuevo en la versión .10; ¿Sigue siendo compatible con el establo actual?

from scrapy import signals, log from scrapy.xlib.pydispatch import dispatcher from scrapy.crawler import CrawlerProcess from scrapy.conf import settings from scrapy.http import Request def handleSpiderIdle(spider): '''Handle spider idle event.''' # http://doc.scrapy.org/topics/signals.html#spider-idle print '\nSpider idle: %s. Restarting it... ' % spider.name for url in spider.start_urls: # reschedule start urls spider.crawler.engine.crawl(Request(url, dont_filter=True), spider) mySettings = {'LOG_ENABLED': True, 'ITEM_PIPELINES': 'mybot.pipeline.validate.ValidateMyItem'} # global settings http://doc.scrapy.org/topics/settings.html settings.overrides.update(mySettings) crawlerProcess = CrawlerProcess(settings) crawlerProcess.install() crawlerProcess.configure() class MySpider(BaseSpider): start_urls = ['http://site_to_scrape'] def parse(self, response): yield item spider = MySpider() # create a spider ourselves crawlerProcess.queue.append_spider(spider) # add it to spiders pool dispatcher.connect(handleSpiderIdle, signals.spider_idle) # use this if you need to handle idle event (restart spider?) log.start() # depends on LOG_ENABLED print "Starting crawler." crawlerProcess.start() print "Crawler stopped." 

ACTUALIZAR:

Si necesita tener también configuraciones por spider vea este ejemplo:

 for spiderConfig in spiderConfigs: spiderConfig = spiderConfig.copy() # a dictionary similar to the one with global settings above spiderName = spiderConfig.pop('name') # name of the spider is in the configs - i can use the same spider in several instances - giving them different names spiderModuleName = spiderConfig.pop('spiderClass') # module with the spider is in the settings spiderModule = __import__(spiderModuleName, {}, {}, ['']) # import that module SpiderClass = spiderModule.Spider # spider class is named 'Spider' spider = SpiderClass(name = spiderName, **spiderConfig) # create the spider with given particular settings crawlerProcess.queue.append_spider(spider) # add the spider to spider pool 

Ejemplo de configuración en el archivo para arañas:

 name = punderhere_com allowed_domains = plunderhere.com spiderClass = scraper.spiders.plunderhere_com start_urls = http://www.plunderhere.com/categories.php?