2017-09-28 4 views
2

Je suis assez nouveau à ce sujet et ai regardé dans les araignées/robots pendant environ une semaine maintenant.erreur incohérente lors de l'exécution de spider dans Scrapy Cloud

J'ai installé des araignées dans Scrapy. Lancé ma première araignée finie hier. Tout semble fonctionner correctement, sauf pour cette erreur qui apparaît de temps en temps.

L'erreur suivante est reçu dans 4 emplois mais pas sur la même page (ou le temps) dans l'araignée:

next_page_url = response.css('div.indexering > a::attr(href)').extract()[-1] 
IndexError: list index out of range 

Ce sont les emplois et quand l'erreur est apparue:

Job 1: 
39: 2017-09-27 09:00:03 ERROR [scrapy.core.scraper] Spider error processing <GET https://www.baby-dump.be/zoeken/?zoek=*/&pnr=102> (referer: [https://www.baby-dump.be/zoeken/?zoek=*/&pnr=101][1]) 

Job 2: 
46: 2017-09-27 10:00:05 ERROR [scrapy.core.scraper] Spider error processing <GET https://www.baby-dump.be/zoeken/?zoek=*/&pnr=98> (referer [https://www.baby-dump.be/zoeken/?zoek=*/&pnr=97][1]) 

Job 3: 
55: 2017-09-27 12:00:07 ERROR [scrapy.core.scraper] Spider error processing <GET https://www.baby-dump.be/zoeken/?zoek=*/&pnr=159> (referer: [https://www.baby-dump.be/zoeken/?zoek=*/&pnr=158][1]) 

Job 4: 
18: 2017-09-27 14:00:11 ERROR [scrapy.core.scraper] Spider error processing <GET https://www.baby-dump.be/zoeken/?zoek=*/&pnr=22> (referer: [https://www.baby-dump.be/zoeken/?zoek=*/&pnr=21][1]) 

Il semble que le bouton 'Suivant' attendu (pour lequel l'araignée regarde) n'a pas été trouvé si j'interprète l'erreur correctement.

Cela ne peut pas être parce que si vous regardez les travaux, l'erreur est incohérente. Il apparaît à des moments aléatoires.

Editer: a ajouté le morceau de code où l'erreur se produit ci-dessous.

def parse(self, response): 
    #get all product detail pages links 
    urls = response.css('div.product-image > a::attr(href)').extract() 
    for url in urls: 
     url = response.urljoin(url) 
     yield scrapy.Request(url=url, callback=self.parse_details) 

    #get next page and follow 
    next_page_url = response.css('div.indexering > a::attr(href)').extract()[-1] 
    if next_page_url: 
     next_page_url = response.urljoin(next_page_url) 
     yield scrapy.Request(url=next_page_url, callback=self.parse) 

Répondre

0

Votre problème est surtout lorsque la page suivante n'est pas disponible du tout. Alors probablement sur la dernière page? Vous devriez changer le code ci-dessous afin que vous sachiez si la dernière page était là ou pas

next_page_url = response.css('div.indexering > a::attr(href)') 

if next_page_url: 
    next_page_url = next_page_url.extract()[-1] 
else: 
    next_page_url = "" 
+0

Salut Tarun, merci pour votre réponse. L'instruction if est ajoutée (sans l'autre) dans le code déjà. La page semble également être présente, car dans le journal, vous voyez que la page d'URL est incrémentée puis suivie. Cela pourrait-il avoir quelque chose à voir avec le fait que l'araignée rampe trop vite pour l'objet 'page suivante'? J'ai ajouté le morceau de code où l'erreur se produira très probablement dans le message original. – Stijn

+0

Le problème est que lorsque vous exécutez 'response.css ('div.indexering> a :: attr (href)'). Extract()', cela peut conduire à un blanc/no-data et vous utilisez '[-1 ] 'toujours, sans vérifier si les résultats sont là ou non. C'est ce que j'ai changé dans mon code. –

+0

Je vois maintenant ce que vous vouliez dire. Merci pour l'aide! Cela a résolu mon problème. – Stijn