web-dev-qa-db-fra.com

tremblante de la sortie du script dans json

J'exécute scrapy dans un script 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()

il s'exécute avec succès et s'arrête mais où est le résultat? Je veux le résultat au format json, comment faire?

result = responseInJSON

comme nous le faisons en utilisant la commande

scrapy crawl argos -o result.json -t json
21
Wasif Khalil

Vous devez définir FEED_FORMAT et FEED_URI paramètres manuellement:

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

Si vous souhaitez obtenir les résultats dans une variable, vous pouvez définir une classe Pipeline qui collecterait les éléments de la liste. Utilisez le spider_closed gestionnaire de signaux pour voir les résultats:

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() 

Pour info, regardez comment Scrapy analyse les arguments de ligne de commande .

Voir aussi: Capture stdout dans le même processus en Python .

25
alecxe

J'ai réussi à le faire fonctionner simplement en ajoutant le FEED_FORMAT et FEED_URI au constructeur CrawlerProcess, en utilisant le code du didacticiel de base de Scrapy API comme suit:

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

Facile!

from scrapy import cmdline

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

Mettez ce script là où vous mettez scrapy.cfg

6
Aminah Nuraini