Guardar los resultados en un archivo csv Scrapy

votos
0

Estoy teniendo algunos problemas con el rastreador web que escribí. Quiero guardar los datos que voy a buscar. Si he entendido derecha desde el tutorial scrapy sólo hay que cederlo y luego iniciar el rastreador mediante el uso scrapy crawl <crawler> -o file.csv -t csvcorrecto? Por alguna razón, el archivo permanece vacía. Aquí está mi código:

# -*- coding: utf-8 -*-
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class PaginebiancheSpider(CrawlSpider):
name = 'paginebianche'
allowed_domains = ['paginebianche.it']
start_urls = ['https://www.paginebianche.it/aziende-clienti/lombardia/milano/comuni.htm']

rules = (
    Rule(LinkExtractor(allow=(), restrict_css = ('.seo-list-name','.seo-list-name-up')),
         callback = parse_item,
         follow = True),)

def parse_item(self, response):
    if(response.xpath(//h2[@class='rgs']//strong//text()) != [] and response.xpath(//span[@class='value'][@itemprop='telephone']//text()) != []):
        yield ' '.join(response.xpath(//h2[@class='rgs']//strong//text()).extract()) +   + response.xpath(//span[@class='value'][@itemprop='telephone']//text()).extract()[0].strip(),

Estoy usando Python 2.7

Publicado el 20/10/2018 a las 10:45
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
1

Si nos fijamos en la producción de la araña, verá un montón de mensajes de error como éste está registrando:

2018-10-20 13:47:52 [scrapy.core.scraper] ERROR: Spider must return Request, BaseItem, dict or None, got 'tuple' in <GET https://www.paginebianche.it/lombardia/abbiategrasso/vivai-padovani.html>

Lo que esto significa es que usted no está dando lo correcto - es necesario o predice Items, y no las tuplas de un único elemento que está creando.
Algo tan simple como esto debería funcionar:

yield {
    'name': response.xpath("normalize-space(//h2[@class='rgs'])").get(),
    'phone': response.xpath("//span[@itemprop='telephone']/text()").get()
}
Respondida el 20/10/2018 a las 11:58
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more