2017-10-26 12 views
0

나는 Scrapy 스파이더와 파이프 라인 설정이 있습니다.Pipeline.close_spider() 메소드에서 Scrapy에 오류가 발생했는지 어떻게 알 수 있습니까?

My Spider는 웹 사이트에서 데이터를 추출하고 Pipeline의 process_item() 메소드는 추출 된 데이터를 임시 데이터베이스 테이블에 삽입합니다.

결국 Pipeline의 close_spider() 메소드에서 임시 데이터베이스 테이블에 대한 몇 가지 오류 검사를 실행합니다. 문제가 없으면 임시 테이블을 영구 보존합니다.

그러나 파이프 라인의 close_spider() 메소드가 호출되기 전에 Scrapy에서 예외가 발생하면 추출 된 데이터가 불완전한 것으로 간주 될 수 있습니다.

파이프 라인의 close_spider() 메소드에서 Scrapy에서 예외가 발생했는지 확인하는 방법이 있습니까? 오류 (추출 된 데이터가 불완전 할 수 있음을 나타냄)가있는 경우 임시 테이블을 영구적으로 만들고 싶지 않습니다.

CLOSESPIDER_ERRORCOUNT를 1로 설정 한 CloseSpider 확장 프로그램을 사용하여 첫 번째 오류가 발생하면 스파이더를 닫습니다. 그러나, 나는 파이프 라인의 close_spider() 메소드에서 정상 닫기와 에러 닫기를 구별하는 방법을 알아 내지 못했다.

답변

0

나는 Scrapy의 신호를 사용하여이를 수행 할 수있었습니다. 다른 누군가가이 문제에 부딪 힐 경우에 대비하여 여기에 답변을 게시하고 있습니다.

나는 spider_error 신호를 잡기 위해 등록하고 스파이더 자체에 콜백 처리기를 제공했습니다.

콜백은 스파이더에 오류가 있음을 나타내는 플래그를 설정합니다.

파이프 라인의 close_spider() 메소드에서 정상 닫기와 오류 닫기를 구별하기 위해 스파이더에 오류 플래그가 설정되었는지 확인했습니다.