码迷,mamicode.com
首页 > 其他好文 > 详细

分布式爬虫

时间:2018-11-03 11:15:49      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:执行   任务调度   list   存储   防火墙设置   max   支持   class   启用   

如何实现分布式爬虫

  • scrapy的url队列存在哪里? (单机内存)

  • redis是支持分布式的内存数据库

  • 可以为scrapy做一个新的调度器(redis),替换scapy的默认调度器, 从而实现分布式功能。

scrapy-redis

  • scrapy-redis是scrapy的一个组件(插件),和 scrapy、redis配合。从而实现支持分布式爬虫

  • 负责分布式爬虫的任务调度

  • 依赖于Scrapy和redis。

  • 主要组件:Scheduler、Dupefilter、Pipeline和Spider。

【没有使用分布式的时候】

url存在本机内容中,如: start_urls= [‘http://www.dushu.com‘ ] yield scrapy.Request(url)

【使用分布式的时候】

没有了start_urls, 而是使用redis_key,

url存在redis中 命令行执行:redis-cli lpush myspider:start_urls ‘http://www.xxx.com‘ 或者使用脚本执行: rds =Redis(‘127.0.0.1‘,6379)  rds.lpush(...)

技术分享图片

搭建分布式

master服务器的配置

  1. 安装scrapy、scrapy-redis、redis。

  2. 修改master的redis配置文件redis.conf:

    1)将 bind 127.0.0.1 修改为bind 0.0.0.0。(注意防火墙设置)

  3. 重启redis-server
  4. 在爬虫项目文件settings.py中添加配置信息
REDIS_HOST = localhost
REDIS_PORT = 6379

slave端的配置

  1. 在爬虫项目的settings.py文件中配置
REDIS_URL = redis://redis_server ip:6379

master和slave端中共同的配置

在settings.py中启用redis存储

ITEM_PIPELINES = {
    scrapy_redis.pipelines.RedisPipeline: 400,
}

运行分布式爬虫

# scrapy runspider myspider_redis.py
scrapy crawl myspider
redis-cli -h redis_server_ip 
redis-cli> lpush myspider_redis:start_urls http://www.xxxxxx.com/aaa/

详细参考官方文档:https://github.com/rmax/scrapy-redis

分布式爬虫

标签:执行   任务调度   list   存储   防火墙设置   max   支持   class   启用   

原文地址:https://www.cnblogs.com/louyifei0824/p/9895470.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!