¿Cómo almacenar los resultados de un yield en una araña en una variable global?
Sé cómo obtener el resultado de yield y guardarlo en un archivo CSV o JSON, pero ¿cómo lo guardo en una variable global o tal vez en una variable local que puedo pasar como argumento de función? Soy muy nuevo en scrapy.
Aquí está mi código:
““
import scrapy
from scrapy.crawler import CrawlerProcess
global_var = {} # almacenar los resultados de yield en esta variable
class TestSpider(scrapy.Spider):
name = ‘test’
allowed_domains = [‘worldpopulationreview.com’]
start_urls = [‘https://worldpopulationreview.com/countries/countries-by-national-debt/’]
def parse(self, response):
country_data = response.xpath(‘//tbody/tr’)
for data in country_data:
name = data.xpath(‘.//td[1]/a/text()’).get()
debt = data.xpath(‘.//td[2]/text()’).get()
population = data.xpath(‘.//td[3]/text()’).get()
link = data.xpath(‘.//td[1]/a/@href’).get()
yield {'country_name': name, 'country_debt': debt, 'country_population': population, 'country_url': response.urljoin(link)}
process = CrawlerProcess(
settings={
“FEEDS”: {
“result.json”: {“format”: “json”},
“result.csv”: {“format”: “csv”},
},
}
)
process.crawl(TestSpider)
process.start()
davy.ai
Para guardar los datos de la declaración de rendimiento en una variable global o en una variable local que se pueda pasar como argumento de función, puede definir una variable de lista antes de la función de análisis y agregar los datos a ella dentro del bucle. Aquí hay un ejemplo:
En el código anterior, definimos el atributo
self.results
dentro del método__init__
del spider, que inicializará la lista cada vez que se inicie el spider. Dentro del métodoparse
, agregamos un diccionario de datos para cada iteración del bucle a la listaself.results
. Luego, pasamos la instancia del spider a la llamada de funciónprocess.crawl
y la almacenamos en una variable para que podamos acceder al atributoself.results
después de que el spider haya terminado de rastrear. Podemos imprimir el atributoself.results
o pasarlo como argumento a otra función dentro del mismo script.