Crawling

[크롤링/11]Scrapy 병렬 처리 설정

박한결 2021. 3. 25. 20:36

특정한 웹 사이트를 크롤링할 때 병렬 처리를 하는 것은 민폐다. 하지만 불특정 다수의 웹 사이트를 크롤링할 때는 병렬처리로 크롤링 시간을 단축할 수 있다.

 

Scrapy의 기본 설정은 특정 웹 사이트를 크롤링하는 것에 맞춰져있다. 즉, 불특정 다수의 웹 사이트를 크롤링 하기에는 잘 맞지않다.

하지만 Scrapy는 비동기 아키텍처로 인해 빠른 broad crawling 광범위 크롤링에 좋은 성능을 보여준다.

 


  • Priority Queue 사용 중지하기
  • SCHEDULER_PRIORITY_QUEUE = 'scrapy.pqueues.DownloaderAwarePriorityQueue'

Priority Queue는 싱글 도메인 크롤링에 적합하다. 

 

  • CONCURRENT_REQUESTS(기본값 16)
  • CONCURRENT_REQUESTS = 100

동시에 병렬 처리할 요청의 최대 개수를 증가시킨다

Scrapy의 기본 전역 동시성 제한은 여러 다른 도메인을 병렬로 크롤링하는 데 적합하지 않으므로 늘리는 것이 좋다. 얼마나 늘릴지는 크롤러가 사용할 수있는 CPU 및 메모리 양에 따라 다르다.

 

  • CONCURRENT_REQUESTS_PER_DOMAIN(기본값 8)

특정 웹 사이트의 도메인에 동시 병렬 처리를 요청할 최대 개수다.

 

  • CONCURRENT_REQUESTS_PER_IP(기본값 0)

특정 웹 사이트의 IP 주소에 동시 병렬 처리할 요청의 최대 개수다. CONCURRENT_REQUESTS_PER_IP을 1 이상의 설정하면, CONCURRENT_REQUESTS_PER_DOMAIN이 무시되고, Download_Delay도 IP주소 별 다운로드 간격이라는 의미로변경된다.

 

  • 쿠키 차단하기

꼭 필요한 경우가 아니면 쿠키를 비활성화하는 것이 좋다. 쿠키는 광범위한 크롤링을 수행 할 때 종종 필요하지 않으며 (검색 엔진 크롤러가 이를 무시 함) 일부 CPU주기를 절약하고 Scrapy 크롤러의 메모리 공간을 줄여 성능을 향상시킨다.

COOKIES_ENABLED = False

 

  • 재시도 차단하기
  • RETRY_ENABLED = False

실패한 HTTP 요청을 재 시도하면 크롤링 속도가 크게 느려질 수 있다. 특히 사이트의 응답 속도가 매우 느리거나 실패 할 경우 시간 초과 오류가 발생하여 불필요하게 여러 번 재 시도되어 다른 도메인에서 크롤러 용량을 재사용 할 수 없어진다.

 


 

이 외에도 Redirection 차단 등 다양한 설정이 있으니 공식 문서를 참고하면 좋다. 

 

광범위한 크롤링을 위한 Scrapy - Broad Crawls 공식 문서: docs.scrapy.org/en/latest/topics/broad-crawls.html?highlight=broad%20crawls

 

Broad Crawls — Scrapy 2.4.1 documentation

Scrapy defaults are optimized for crawling specific sites. These sites are often handled by a single Scrapy spider, although this is not necessary or required (for example, there are generic spiders that handle any given site thrown at them). In addition t

docs.scrapy.org