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)
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
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. –
Je vois maintenant ce que vous vouliez dire. Merci pour l'aide! Cela a résolu mon problème. – Stijn