2014-03-06 8 views
3

Scrapy의 JOBDIR 설정을 사용하여 중복하기 항목 재개는 여기에 설명 크롤 제공 : 여전히 실행중인 동안Scrapy - JOBDIR

scrapy crawl myspider -o out.csv -t csv -s JOBDIR=./jobs/run-1 

:

http://doc.scrapy.org/en/latest/topics/jobs.html

내가 이렇게 내 크롤링 명령을 실행하려고 CTRL-C를 눌러 정상적으로 종료합니다. 그런 다음 같은 명령을 다시 실행하여 다시 시작하십시오.

[myspider] INFO: Resuming crawl (74 requests scheduled) 

을하지만 내 출력 CSV 파일을 볼 때, 나는 중복 항목은 다음과 같이 있습니다 참조 : 나는 터미널 출력에서 ​​크롤링을 다시 시작하는 것을 확인할 수 있습니다

name,email 
Alice,[email protected] 
Bob,[email protected] 
... 
name,email   <- duplicated header! 
Bob,[email protected] <- duplicated row! 
... 

이 정상인가요? 같은 명령에 -o 옵션과 JOBDIR 옵션을 사용해도 괜찮은지 궁금합니다. 그렇지 않은 경우 크롤링 된 항목을 내보내려면 어떻게해야합니까?

현재, 나는 Scrapy 0.22.1을 사용하고 있습니다.

감사합니다.

답변

4

예 예. 당신은 scrapy의 소스 코드를 살펴 거라고, 특히 CsvItemExporter, 당신은 크롤링 재개/을 중지 에인지 대한 을 찾을 경우. 수출업자는 기본적으로 2 개의 플래그로 헤더를 처리합니다. 헤더를 포함할지 어떨지를 지시하는 1 개 : include_headers_line. 두 번째 : _headers_not_written은 세션의 첫 번째 항목을 제외하고 새 스크랩 한 항목이 기록 될 때마다 헤더가 덤프되는 것을 방지합니다. 이러한 플래그는 그러나 크롤러가 새롭게 다시 시작할 때마다 재설정 및 세션 재개에 대한 수출은 모든 종류의 정보를 전달하지 않는 것 :

class CsvItemExporter(BaseItemExporter): 

    def __init__(self, file, include_headers_line=True, join_multivalued=',', **kwargs): 

     .... 
     self._headers_not_written = True 
     .... 

    def export_item(self, item): 
     if self._headers_not_written: 
      self._headers_not_written = False 
      self._write_headers_and_set_fields_to_export(item) 

또한 -o 옵션은 crawler을 지시하는 덤프하는 것보다 더 아무것도하지 않습니다를 스크랩 한 항목을 지정된 출력에 넣습니다.