分布式爬虫;部署

分布式爬虫

Scrapy_Redisscrapy的基础上实现了更多,更强大的功能具体有:

1.request去重,

2.爬虫持久化,

3.轻松实现分布式,

爬虫分布式可以提高效率,

改成分布式爬虫,需要修改的四组组件:

Scheduler 

Duplication Filter

item Pipeline  数据处理的管道,默认数据会存储到redis

Base Spider 

通过redis可以实现调度器队列指纹集合。

在多台主机上同时运行爬虫任务协同爬取,而协同爬取的前提就是共享爬取队列。这样各台主机就不需要各自维护爬取队列,而是从共享爬取队列存取Request。

但是各台主机还是有各自的Scheduler和Downloader,所以调度和下载功能分别完成。如果不考虑队列存取性能消耗,爬取效率还是会成倍提高。


redis

为了维护爬虫队列(队列不能重复用到了集合)

我们用redis数据库进行存储,(列表 、集合 、有序集合、哈希表 、 字符串)

1.在settings中设置,自定义去重组件:

    DUPEFITER_CLASS = "scrapy_redis.dupfilter.REPDupeFilter"

2.设置SCHEDULER,使用scrapy_reddis的调度器组件.

    SCHEDULER = "scrapy_redis.scheduler.Scheduler"

3.不清除redis的请求记录,允许暂停和停止爬取

    SCHEDULER_PERSIST = True

4.设置请求任务的队列模式.

    #SpiderPriorityQueue 是scrapy_redis框架默认的队列模式(有自己的优先级)

    SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"

    # SpiderQueue 是请求的队列模式(FifoQueue),先进先出

    #SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"

    # SpiderStack 是请求的队列模式(LifoQueue),后进先出

    #SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"

5.设置redis数据库的ip和端口

    REDIS_HOST = '127.0.0.1'

    REDIS_PORT = 6379

6.激活redis管道

'scrapy_redis.pipelines.RedisPipeline': 400,

通用爬虫用:

from scrapy_redis.spiders import RedisCrawlSpider

聚焦爬虫:

from scrapy_redis.spiders import RedisSpider

部署

需要导包:

    import scrapyd

    scrapyd-client

开启部署命令  scrapyd

本地部署:

    scrapyd-deploy -p <项目名称>

制定版本部署:

    scrapyd-deploy -p <项目名称> --version <版本号>

远程部署:

    购买linux服务器后登录服务器:ssh ubuntu@端口  

你可能感兴趣的:(分布式爬虫;部署)