scrapy_redis分布式爬虫

说到redis了,自然就要说到另一个爬虫框架scrapy_redis,分布式爬虫,
scrapy与scrapy_redis最大的不同是scheduler,也正是因为这个scheduler才使得scrapy_redis能够做到分布式。
最大的改动在于将带爬url放进redis,master主要就是维护此队列,slave就能根据优先级队列进行分别式爬取,同时redis有set,dupefiler模块通过哈希指纹去重,保证分布式进行。
item返回是先返回到master的redis然后存入其他数据库。

对scrapy的改造:
改造
setting:

1.(必须加)。使用scrapy_redis.duperfilter.REPDupeFilter的去重组件,在redis数据库里做去重。

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

2.(必须加)。使用了scrapy_redis的调度器,在redis里面分配请求。

SCHEDULER = "scrapy_redis.scheduler.Scheduler"

3.(必须加)。在redis queues 允许暂停和暂停后恢复,也就是不清理redis queues

SCHEDULER_PERSIST = True

4.(必须加)。通过RedisPipeline将item写入key为 spider.name: items的redis的list中,供后面的分布式处理item。

这个已经由scrapy-redis实现了,不需要我们自己手动写代码,直接使用即可。

ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline': 100
}
REDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379

spider:

from scrapy_redis.spiders import RedisSpider
import scrapy

class ToutiaoSpider(RedisSpider):
    name='toutiao'
    redis_key = 'start_url'    #需将start_url先存入redis
    def parse(self, response):
        ....
        scrapy.Request(url, callback=xxx)

scrapy与scrapy_redis的区别
scrapy_redis总结

你可能感兴趣的:(scrapy_redis分布式爬虫)