Estoy tratando de ejecutar scrapy desde una secuencia de comandos como se describe here. Sugirió usar el fragmento this, pero cuando lo hago cuelga indefinidamente. Esto fue escrito en la versión .10; ¿sigue siendo compatible con el establo actual?Ejecutando Scrapy desde una secuencia de comandos: se bloquea
Respuesta
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."
ACTUALIZACIÓN:
Si es necesario tener también ajustes por araña ver 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 de arañas:
name = punderhere_com
allowed_domains = plunderhere.com
spiderClass = scraper.spiders.plunderhere_com
start_urls = http://www.plunderhere.com/categories.php?
obtengo [este] (https://gist.github.com/1051117) rastreo. Mi proyecto de scrapy se llama scraper. ¿Podría ser el problema? – ciferkey
Creo que ese es el problema. Esto es de un proyecto real. Puede eliminar referencias al raspador. Solo necesitas algunos ajustes para arañas. – warvariuc
entonces, ¿después de eliminar las referencias al raspador cómo voy a importar las configuraciones para mi proyecto? – ciferkey
- 1. Ejecutando MSTest UnitTests usando una secuencia de comandos de MSBuild
- 2. ejecutando un comando como superusuario desde una secuencia de comandos python
- 3. Ejecutando comandos de shell desde Java
- 4. Ejecutando comandos de shell desde Scala REPL
- 5. Cygwin ejecutando secuencia de comandos de un archivo por lotes?
- 6. ¿Puede una secuencia de comandos bash decir si se está ejecutando a través de cron?
- 7. Determine si ya se está ejecutando una secuencia de comandos de ruby
- 8. Comprueba si se invocó la secuencia de comandos bash desde una shell u otra secuencia de comandos/aplicación
- 9. Ejecutando múltiples comandos desde un script cmd de Windows
- 10. Cómo ejecutar una magia de IPython desde una secuencia de comandos (o cronometrar una secuencia de comandos de Python)
- 11. Enviar correo desde una secuencia de comandos de Windows
- 12. Crear una secuencia de comandos de inserción desde Seleccionar resultados
- 13. Cómo iniciar PowerShell (no una secuencia de comandos) desde la línea de comandos
- 14. Ejecutando comandos raíz desde PHP ... ¿Hay una manera segura?
- 15. La secuencia de comandos PHP no puede obtenerse desde la secuencia de comandos de Python
- 16. Ejecutar (remota) secuencia de comandos php desde (local) secuencia de comandos pitón
- 17. ceceo como una secuencia de comandos shebang vs lisp ejecutando en SLIME
- 18. Groovy ejecutando comandos de shell
- 19. Cómo llama a varias secuencias de comandos de MSBuild desde una secuencia de comandos de MSBuild
- 20. Invocar una segunda secuencia de comandos con argumentos de una secuencia de comandos
- 21. ¿Es posible conocer qué secuencia de comandos se está ejecutando un proceso de python?
- 22. Programar secuencia de comandos R
- 23. ¿cómo puedo determinar si una secuencia de comandos python se importa como módulo o se ejecuta como secuencia de comandos?
- 24. .net - ¿Cómo se registra una secuencia de comandos de inicio?
- 25. Ejecutando Jmeter de forma remota desde la línea de comandos
- 26. arañas edificio Scrapy en mi propio programa, no quiero llamar scrapy de línea de comandos)
- 27. C++ Ejecutando comandos CMD
- 28. Ejecutar secuencia de comandos bash desde Windows PowerShell
- 29. Llame a aspnet_regsql.exe desde la secuencia de comandos SQL
- 30. ¿Hay una en secuencia de memoria que bloquea como una secuencia de archivo
Esta pregunta y respuesta pueden estar listas para la actualización. Aquí hay [un fragmento reciente de Scrapy] (http://scrapy.readthedocs.org/en/0.16/topics/practices.html). Funciona, pero la pregunta, para mí, se convierte en: ¿cómo se detiene el reactor Twisted y se mueve cuando está listo? – bahmait