특정한 웹 사이트를 크롤링할 때 병렬 처리를 하는 것은 민폐다. 하지만 불특정 다수의 웹 사이트를 크롤링할 때는 병렬처리로 크롤링 시간을 단축할 수 있다.
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
'Crawling' 카테고리의 다른 글
[크롤링/13]Scrapy 오류 처리 설정 (0) | 2021.03.25 |
---|---|
[크롤링/12]Scrapy HTTP 요청/캐시 설정 (0) | 2021.03.25 |
[크롤링/10]Scrapy로 크롤링 대상 사이트에 피해주지 않는 설정하기 (0) | 2021.03.25 |
[크롤링/09]크롤러 분류 (0) | 2021.03.25 |
[크롤링/08]퍼머링크와 데이터베이스 설계 (0) | 2021.03.25 |