2014-11-14 2 views
1

나는 scrapy 프레임 워크를 사용하여 일부 제품 양식 웹 사이트를 스크랩하기 위해 웹 스파이더를 작성했습니다. 나는 쓰여진 거미의 범위와 누락 된 항목을 계산하는 가장 좋은 방법이 무엇인지 궁금합니다.치료 webspider의 적용 범위를 계산

지금 당장 사용하고있는 것은 로깅 사례이며, 예외를 구문 분석하거나 예외를 발생시킬 수 없습니다. 예를 들어 : 제품 가격이나 장소 주소에 특정 형식이 필요할 때 작성한 정규식이 스크랩 된 문자열과 일치하지 않습니다. 또는 특정 데이터에 대한 내 xpath 선택자가 아무 것도 반환하지 않을 때.

때로는 제품이 한 페이지 또는 여러 페이지에 나열 될 때 curlgrep을 사용하여 대략적으로 제품 수를 계산합니다. 그러나 이것을 처리하는 더 나은 관행이 있는지 궁금 해서요.

답변

1

일반적으로 logging을 사용하여 오류를 기록하고 아무 것도 반환하지 않고 콜백을 종료합니다.

예 (제품 가격 필요) :

loader = ProductLoader(ProductItem(), response=response) 
loader.add_xpath('price', '//span[@class="price"]/text()') 
if not loader.get_output_value('price'): 
    log.msg("Error fetching product price", level=log.ERROR) 
    return 

당신은 또한 잡아 예외의 모든 종류의 크롤링 동안 무슨 일이 있었 로그인 할 signals을 사용할 수 있습니다, 참조 :

이것은 기본적으로 Easier to ask for forgiveness than permission 원칙을 따르며 스파이더가 실패하고 처리하여 하나의 특정 장소에서 오류 - 신호 처리기.


다른 생각 :

  • 당신도 다음 리뷰에 대한 데이터베이스에 응답 URL 및 오류 역 추적을 배치 할 수 있습니다 -이 여전히 "로깅"하지만, 구조화 된 방식으로 더 할 수있는 나중에 완료하는 데 편리합니다
  • 다른 크롤링 오류를 나타 내기 위해 사용자 지정 예외를 만드는 것이 좋습니다. 예를 들어 MissingRequiredFieldError, InvalidFieldFormatError과 같이 크롤링 된 필드가 유효성 검사를 통과하지 못했을 때 제기 할 수 있습니다.
+0

저는 개인적으로 EAFP 스타일을 더 선호합니다. 그래서이 답변은 도움이되지만, 1 웹 페이지에서 20 개의 세부 정보를 스크랩하면 20 개의 try 및 except 절이 가득 찼습니다. –

+0

@HadyElsahar 아니요, 'spider_error' 신호 처리기가있는 경우 크롤링하는 동안 발생하는 모든 예외가 처리기에서 "사용 가능"하게됩니다. 사용자 지정 예외를 발생 시키면 오류 분석 및 처리가 쉬워 질 것입니다. – alecxe

+0

네, 그러나 [옵션 항목]을 가져 오지 못하면 거미가 나머지 세부 정보를 긁어 모으기 위해 try catch 절의 각 세부 사항을 처리하는 것을 선호합니다. 또한, 실제로 실패한 부분에 대한 전용 로그 메시지 (예 : 가격 텍스트 가져 오기 또는 구문 분석) –

관련 문제