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''
})