example español crawlspider crawl python python-2.7 scrapy

python - español - scrapy run spider del script



scrapy ruby (4)

¡Es una acción tan simple y directa!

Solo revisa la documentación oficial . Me gustaría hacer un pequeño cambio para que pueda controlar la araña para que se ejecute solo cuando lo haga python myscript.py y no cada vez que solo importa desde allí. Solo agregue un if __name__ == "__main__" :

import scrapy from scrapy.crawler import CrawlerProcess class MySpider(scrapy.Spider): # Your spider definition ... if __name__ == "__main__": process = CrawlerProcess({ ''USER_AGENT'': ''Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'' }) process.crawl(MySpider) process.start() # the script will block here until the crawling is finished

Ahora guarde el archivo como myscript.py y ejecute ''python myscript.py`.

¡Disfrutar!

Quiero ejecutar mi araña desde un script en lugar de un scrap crawl

Encontré esta página

http://doc.scrapy.org/en/latest/topics/practices.html

pero en realidad no dice dónde poner esa secuencia de comandos.

cualquier ayuda por favor?


¿Por qué no haces esto?

from scrapy import cmdline cmdline.execute("scrapy crawl myspider".split())

Pon esa secuencia de comandos en el mismo camino donde pones scrapy.cfg


Afortunadamente, la fuente de scrapy está abierta, por lo que puedes seguir el funcionamiento del comando crawl y hacer lo mismo en tu código:

... crawler = self.crawler_process.create_crawler() spider = crawler.spiders.create(spname, **opts.spargs) crawler.crawl(spider) self.crawler_process.start()


Puedes simplemente crear un script de Python normal y luego usar el runpider de la opción de línea de comando de runspider , que te permite ejecutar un spider sin tener que crear un proyecto.

Por ejemplo, puede crear un solo archivo _spider.py con algo como esto:

import scrapy class QuestionItem(scrapy.item.Item): idx = scrapy.item.Field() title = scrapy.item.Field() class Spider(scrapy.spider.Spider): name = ''SO'' start_urls = [''http://.com''] def parse(self, response): sel = scrapy.selector.Selector(response) questions = sel.css(''#question-mini-list .question-summary'') for i, elem in enumerate(questions): l = scrapy.contrib.loader.ItemLoader(QuestionItem(), elem) l.add_value(''idx'', i) l.add_xpath(''title'', ".//h3/a/text()") yield l.load_item()

Luego, siempre que tenga scrapy correctamente instalado, puede ejecutarlo usando:

scrapy runspider _spider.py -t json -o questions-items.json