2017-09-28 8 views
2

저는 이것에 상당히 익숙하며 약 1 주 동안 거미/크롤러를 조사하고 있습니다.Scrapy Cloud에서 스파이더를 실행하는 동안 일관성없는 오류가 발생했습니다.

나는 Scrapy에서 거미를 설정 해왔다. 어제 내 완성 된 거미를 출시했습니다. 모든 것이 이제는 튀어 나오는이 오류를 제외하고는 매끄럽게 진행되는 것 같습니다.

다음 오류가 아니라 거미 같은 페이지 (또는 시간)에 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

안녕하세요, 답변 해 주셔서 감사합니다. if 문은 코드에 이미 추가되어 있습니다 (else는 제외). 또한 로그 페이지에서 URL 페이지가 증가 된 다음 추적된다는 것을 알기 때문에 페이지가 나타납니다. 거미가 '다음 페이지'개체로 너무 빠르게 크롤링하는 것과 관련이있을 수 있습니까? 원본 게시물에 오류가 발생할 가능성이 높은 코드 부분을 추가했습니다. – Stijn

+0

'response.css ('div.indexering> a :: attr (href)'). extract()'를 실행하면 빈/데이터 없음이 생길 수 있고'[-1 ]'결과가 있는지 없는지 항상 확인하십시오. 이것이 내가 코드에서 변경 한 것입니다. –

+0

나는 당신이 의미하는 것을 지금 본다. 도와 주셔서 감사합니다! 이 문제가 해결되었습니다. – Stijn