最简单的分布式爬虫组合

这两天写爬虫,用了下redis,突然想起来没有写过有关于redis的使用指南,其实也是自己使用过程中遇到的坑罢了,如果有不对的地方,希望大家能指正。

本篇文章主要介绍的是redis和scrapy的使用,也就是主要做分布式爬虫时候需要用到的
新手们也不要对redis这个东西有抵触,很简单的,一教就会。
比如:在一场运动会中,田径比赛中有各个项目,如果只有一个选手(scrapy)要把所有的项目都参与一遍,会要非常久的时间,并且这个选手容易出现问题(体力透支,时间不够),那么,分布式爬虫就相当于是每一个项目都有一个参赛的选手,从发令员(redis)处,领域需要参与的项目(指定爬取的url地址),在接受到url后,去到指定位置参赛(爬取)
这么理解是不是就很简单了?
下面给一个最简单的例子示范:
新建一个scrapy项目:redis_scrapy,
在其中的spider文件夹下新建一个爬虫程序:RedisScrapy1.py
RedisScrapy1.py

#import scrapy 原本的爬虫是使用的这个
#若要使用redis的话,需要安装scrapy_redis包
#pip install scrapy_redis
from scrapy_redis.spiders import RedisSpider

class Redisscrapy1Spider(RedisSpider):#括号里也要改掉
    name = 'rs1' #爬虫开始的名字 
    #allowed_domains = ['baidu.com'] 
    #start_urls = ['http://baidu.com/'] 开始地址就不需要了
    redis_key = 'redisspider:url' #需要设置redis_key:'key'  这个key就是从#redis的list列表中获取的值的key
    #爬取规则可以随意发挥,我这里只是为了演示二者如何联合使用的
    def parse(self, response):
        print('-------爬虫---------')
        print(response.url)
        print('----------------')
        pass

在其他的设置中,主要和以往的爬虫setting不相同的地方就是:
复制粘贴下面的参数就可以了。更多的参数说明可以参考:https://www.cnblogs.com/OldJack/p/7719370.html

#确保所有的爬虫通过Redis去重
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

# 启动从reids缓存读取队列,调度爬虫
SCHEDULER = "scrapy_redis.scheduler.Scheduler"

# 调度状态持久化,不清理redis缓存,允许暂停/启动爬虫
# 是否在关闭时候保留原来的调度器和去重记录,True=保留,False=清空
SCHEDULER_PERSIST = True

# 请求调度使用优先队列(默认)
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderPriorityQueue'

#指定用于连接redis的URL(可选)
REDIS_URL = None

#指定连接到redis时使用的端口和地址
#如果不填写,就是默认redis在本机运行,host为127.0.0.1,端口是6379,填写了,就会到指定ip和端口去调用指定地址的redis
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379

启动redis (在redis目录下运行redis-server.exe) ,
然后在另一窗口启动(也是redis目录下运行:redis-cli.exe -h 127.0.0.1 -p 6379)
这里的 -h和-p是指定redis的host和port
然后键入:lpush redisspider:url “http://www.baidu.com
lpush:指明这是一次list集合的插入
redisspider:url 是这个list的key
http://www.baidu.com” 是插入的值

当你插入url完成后,在运行自己的scrapy爬虫,那么这个爬虫就会自动从redis中找到你指明key的list中的值。然后进行访问。
如下图:
这里写图片描述

以此类推,多建立几个scrapy,这样最简答的分布式爬虫就完成了。

猜你喜欢

转载自blog.csdn.net/qq_38044574/article/details/82670196
今日推荐