Redis+Scrapy 实现分布式爬虫

2023-07-0907:27:09云计算与物联网Comments1,666 views字数 924阅读模式

分布式和普通爬虫的区别在于原本的一个任务分成了多个任务,由多台机器去跑。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50637.html

原本 scrapy 是在自己的调度器中用 set() 去重,但这时候是在多个机器进行,就需要共用一个东西进行去重,不然这边爬过了,那边又爬一遍。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50637.html

整个原理简单来说就是利用 Redis 实现把多个爬虫的 set和请求队列合为一体,Redis 开启远程连接,其他机器通过 set 查重并把合格的 URL 存进另一个集合(充当请求队列)。到这里同时也就实现了断点续爬,如果爬虫因某些原因中断了,但此时在 Redis 中的数据并没有损失,爬过的 URL 已经记录下来了,请求队列的数据也还在文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50637.html

Redis+Scrapy 实现分布式爬虫

解析完数据后再把数据传到 Redis 存储文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50637.html

如何开始爬虫?主要是 URL 来源和数据的去向发生改变,以及无需在代码中判断数据是否重复,全部去重由 scrapy_redis完成文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50637.html

1、start_urls换成 redis_key。因为 start_urls是由它的start_request调用并 yield请求的,但它会在请求中设置dont_filter = True ,也就是说 start_urls里的 URL 会绕过基于 set()集合的去重,必定被爬取。那么多个机器就会重复请求 start_urls里的 URL,scrapy_redis里存放了一个 redis_key,它会把 redis_key放到请求队列里,现在变成了谁抢到 redis_key谁发起第一个请求。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50637.html

Redis+Scrapy 实现分布式爬虫

2、类继承的scrapy.Spider换成 scrapy_redis.Spider里的 RedisSpider,如果是 crawlSpider 就用 RedisCrawlSpider文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50637.html

Redis+Scrapy 实现分布式爬虫

3、设置 scrapy_redis的 pipeline文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50637.html

Redis+Scrapy 实现分布式爬虫

4、在 settings 中配置文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50637.html

Redis+Scrapy 实现分布式爬虫

5、此时可以启动爬虫,这时爬虫会等待,因为它们没有 start_urls,而是使用了redis_key。要让爬虫运行起来,就要在第三个地方连上 Redis,然后 select 对应的数据库,如这里是 select 8。我们redis_key的值是"ty_start_url",所以我们在数据库中写入 ty_start_url,并将起始页作为它的值文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50637.html

Redis+Scrapy 实现分布式爬虫

然后爬虫就会开始运行,完毕!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50637.html

补充:一般数据去重有四个方案文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50637.html

Redis+Scrapy 实现分布式爬虫

4是最好的,在 setting 中改好下面配置就行了文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50637.html

Redis+Scrapy 实现分布式爬虫

总逻辑图如下文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50637.html

Redis+Scrapy 实现分布式爬虫
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50637.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/yunda/50637.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定