2017-09-28 18 views
2

これはかなり新しく、スパイダー/クローラーを約1週間は探しています。Scrapy Cloudでスパイダーを実行しているときに一貫性のないエラーが発生する

私はScrapyでスパイダーを設定しています。昨日私の完成したスパイダーを発売しました。すべてが今のところそしてこのポップアップする1つのエラーを除いて、滑らかに走るようです。クモで

次のエラーが同じページ(または時間)に4つのジョブで受信したがされていません。

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

は、これらのジョブで、エラーが表示されたとき:

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]) 

エラーを正しく解釈すると、「次へ」ボタン(スパイダーが探している)が見つかりませんでした。

これは、ジョブを見ると、エラーが矛盾するためではありません。それはランダムな時間に現れます。

編集:以下にエラーが発生した箇所のコードを追加しました。

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) 

答えて

0

あなたの問題は、ほとんどの場合次のページがない場合です。おそらく最後のページですか?最後のページがあるかどうかを知るためにコードを以下に変更してください。

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

こんにちはTarun、あなたの答えに感謝します。 ifステートメントは、コードにすでに追加されています(elseはありません)。ログには、urlページがインクリメントされ、その後に続くことがわかるため、このページも表示されます。それは、次のページのオブジェクトのためにあまりにも速くクロールするクモと関係がありますか? 元の投稿にエラーが発生する可能性が高い箇所にコードを追加しました。 – Stijn

+0

'response.css( 'div.indexering> a :: attr(href)')。extract()'を実行すると、空白/データなしになり、 '[-1 ] '結果が存在するかどうかを確認することなく、常に。それが私のコードで変更されたものです。 –

+0

私は今あなたが何を意味するかを見ます。助けてくれてありがとう!これは私の問題を修正しました。 – Stijn

関連する問題