2017-09-08 4 views
1

J'essaie d'obtenir des données à partir d'un site Web, tout semble être correct et le xpath a été testé sur le shell.Scrapy retournant un fichier json vide

# -*- coding: utf-8 -*- 

from scrapy.contrib.spiders import CrawlSpider 


class KabumspiderSpider(CrawlSpider): 
    name = "kabumspider" 
    allowed_domain = ["www.kabum.com.br"] 
    start_urls = ["https://www.kabum.com.br"] 


def parse(self, response): 
     categorias = response.xpath('//p[@class = "bot-categoria"]/a/text()').extract() 
     links = response.xpath('//p[@class = "bot-categoria"]/a/@href').extract() 

     for categoria in zip(categorias, links): 

      info = { 
       'categoria': categoria[0], 
       'link': categoria[1], 
      } 
      yield info 

Bien que, la sortie semble être:

[ 

Quel est le problème avec mon code?

+0

Avez-vous essayé de tester les sorties dans le shell scrapy? De même, vous devez probablement créer des éléments en premier, écrire les sorties dans les propriétés de l'élément et écrire les éléments dans le fichier JSON. – cyril

+0

J'ai utilisé des objets mais je pensais que cela aurait pu être le problème, donc je l'ai fait encore cette fois en utilisant des dictionnaires ... Tout semble fonctionner très bien dans la coquille scrapy –

+0

si vous mettez «print's dans le pour, peut tu les vois? Avez-vous également un pipeline personnalisé activé? – eLRuLL

Répondre

0

J'ai couru le grattoir et il fonctionne bien pour moi. Le seul problème que j'ai trouvé est que votre méthode d'analyse est en dehors de la classe.

# -*- coding: utf-8 -*- 

from scrapy.contrib.spiders import CrawlSpider 


class KabumspiderSpider(CrawlSpider): 
    name = "kabumspider" 
    allowed_domain = ["www.kabum.com.br"] 
    start_urls = ["https://www.kabum.com.br"] 

    def parse(self, response): 
     categorias = response.xpath('//p[@class = "bot-categoria"]/a/text()').extract() 
     links = response.xpath('//p[@class = "bot-categoria"]/a/@href').extract() 

     for categoria in zip(categorias, links): 
      info = { 
       'categoria': categoria[0], 
       'link': categoria[1], 
      } 
      yield info 
+0

hahaha qui était en fait l'erreur, je me sens gêné pour faire une telle erreur simple –