스크래피-레디 스 분산 크롤러의 원리와 스크래피와의 차이점

Scrapy 는 일반적인 크롤러 프레임 워크이지만 Scrapy 분산 크롤링 을보다 쉽게 ​​구현하기 위해 분산
Scrapy-redis지원하지 않으며 일부 redis 기반 구성 요소 (구성 요소 만)를 제공합니다.

scrapy任务调度是基于文件系统,这样只能在单机执行crawl。

scrapy-redis将待抓取request请求信息和数据items信息的存取放到redis queue里,使多台服务器可以**同时执行crawl和items process**,大大提升了数据爬取和处理的效率。

Distributed는 마스터-슬레이브 구조를 채택하여 마스터 서버와 여러 슬레이브 서버를 설정합니다. 마스터 측은 Redis 데이터베이스 및 분산 다운로드 작업을 관리합니다. Slave는 Scrapy 크롤러를 배포하여 웹 페이지를 추출하고 데이터를 구문 분석 및 추출합니다. 최종 구문 분석 된 데이터는 동일한 MongoDb 데이터베이스에 저장됩니다.

实现原理
通过scrapy写了一个工程之后,是不能同时让两个电脑共同爬取
为什么不能呢?
因为你的scrapy运行在你的电脑的内存中,你的调度器运行在你的内存中。我的调度器运行在我的内存中
将**调度器**放到公共的地方,redis中,都放到我的redis中

实现结果:
我的windows:是服务端(redis放的地方,调度器),也是客户端
大家的windows:都是客户端

如何实现?
基于scrapy的组件,scrapy-redis组件
(1)调度器放到了redis中
(2)实现了一个管道,保存到redis中
(3)重写了两个类Spider(RedisSpider),CrawlSpider(RedisCrawlSpider)

pip install scrapy-redis
여기에 사진 설명 삽입
여기에 사진 설명 삽입
scrapy-redis 스케줄러는 redis 세트의 고유 한 기능을 통해 중복 필터 중복 제거 (DupeFilter 세트가 크롤링 된 요청을 저장함)를 영리하게 실현합니다.
새로 생성 된 Spider 요청의 경우 요청의 지문이 redis의 DupeFilter 세트로 전송되어 중복 여부를 확인하고 중복되지 않은 요청 푸시는 redis의 요청 큐에 기록됩니다.
스케줄러는 우선 순위에 따라 매번 redis의 요청 큐에서 요청을 팝하고 처리를 위해 요청을 스파이더로 보냅니다.
스파이더가 크롤링 한 항목을 scrapy-redis의 항목 파이프 라인으로 보내고 크롤링 된 항목을 redis의 항목 대기열에 저장합니다. 항목 대기열에서 항목을 추출하여 항목 프로세스 클러스터
요약 을 실현하는 것은 쉽습니다.
scrapy-redis는 redis를 영리하게 사용하여 요청 대기열항목 대기열 을 구현 하고 , redis 세트를 사용하여 요청 중복 제거 를 달성 하고, 단일 머신에서 여러 개로 스크래피를 확장합니다. 더 큰 규모의 크롤러 클러스터를 달성하기위한 기계
참조 기사
https://piaosanlang.gitbooks.io/spiders/07day/section7.3.html

추천

출처blog.csdn.net/weixin_42540340/article/details/105099541