tutorial spider scraping online library examples crawling crawl python json web-scraping scrapy scrapy-spider

spider - web scraping python examples



scrapy de salida de script en json (3)

Estoy ejecutando scrapy en un script de python

def setup_crawler(domain): dispatcher.connect(stop_reactor, signal=signals.spider_closed) spider = ArgosSpider(domain=domain) settings = get_project_settings() crawler = Crawler(settings) crawler.configure() crawler.crawl(spider) crawler.start() reactor.run()

Se ejecuta con éxito y se detiene, pero ¿dónde está el resultado? Quiero el resultado en formato json, ¿cómo puedo hacer eso?

result = responseInJSON

como hacemos usando comando

scrapy crawl argos -o result.json -t json


¡Fácil!

from scrapy import cmdline cmdline.execute("scrapy crawl argos -o result.json -t json".split())

Pon ese script donde pones scrapy.cfg


FEED_URI configurar los ajustes FEED_FORMAT y FEED_URI manualmente:

settings.overrides[''FEED_FORMAT''] = ''json'' settings.overrides[''FEED_URI''] = ''result.json''

Si desea obtener los resultados en una variable, puede definir una clase Pipeline que recopilaría elementos en la lista. Utilice el spider_closed señales spider_closed para ver los resultados:

import json from twisted.internet import reactor from scrapy.crawler import Crawler from scrapy import log, signals from scrapy.utils.project import get_project_settings class MyPipeline(object): def process_item(self, item, spider): results.append(dict(item)) results = [] def spider_closed(spider): print results # set up spider spider = TestSpider(domain=''mydomain.org'') # set up settings settings = get_project_settings() settings.overrides[''ITEM_PIPELINES''] = {''__main__.MyPipeline'': 1} # set up crawler crawler = Crawler(settings) crawler.signals.connect(spider_closed, signal=signals.spider_closed) crawler.configure() crawler.crawl(spider) # start crawling crawler.start() log.start() reactor.run()

Para tu información, mira cómo Scrapy analiza los argumentos de la línea de comandos .

También vea: Capturar stdout dentro del mismo proceso en Python .


FEED_FORMAT que funcionara simplemente agregando FEED_FORMAT y FEED_URI al constructor CrawlerProcess , utilizando el código de tutorial básico de Scrapy API de la siguiente manera:

process = CrawlerProcess({ ''USER_AGENT'': ''Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'', ''FEED_FORMAT'': ''json'', ''FEED_URI'': ''result.json'' })