day8、linux下安装Scrapy和Redis-分布式使用

1、Linux下安装scrapy

​ 如果没有pip先下载

​ sudo apt-get install python-pip

​ scrapy框架有可能依赖于下面的两个库

​ sudo apt-get install python-dev

​ sudo apt-get install libevent-dev

​ pip install scrapy

2、redis安装

​ Linux下安装:

​ cd 压缩包的路径下(cd Desktop)

​ tar -zxvf redis-3.2.8.tar.gz

​ cp -r ./redis-3.2.8 /usr/local/redis (如果被拒绝,用sudo cp ...)

​ sudo make install

​ 如果有错,请输入指令:sudo make MALLOC=libc

​ 运行起来服务器:

​ cd /usr/local/redis/src

​ ./redis-server

​ 服务器启动以后,该redis数据就可以处理数据了;操作该数据库需要打开其客户端

​ 另开一个终端

​ cd /usr/local/redis/src

​ ./redis-cli

​ 127.0.0.1:6379>ping

​ PONG 说明服务器打开成功

​ 关闭服务器

​ 在客户端输入命令:shutdown [nosave|save]

​ 【注意】如果是远程连接的客户端,则不能shutdown

​ 远程访问:redis-cli -h xxx.xx.xx.xx -port 6379 -a password

​ redis-cli -h 10.36.135.43

​ 在windows中,redis-server默认不允许远程访问,可以在配置文件中打开

​ 配置即是redis目录下的redis.windows.conf

​ 然后修改如下:

​ 56行注释掉 即: # bind 127.0.0.1

​ 75行把后面值改成 no 即:protected-mode no

​ 然后把服务器重启即可

3、redis介绍

​ Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库

​ Redis与其他key-value缓存机制相比有一下特点:

​ Redis支持数据的持久化,可以将内存中的数据保存到磁盘

​ Redis不仅支持key-value类型的数据,同时还支持list、set、zset、hash

​ Redis支持数据的备份,即master-slave模式的数据备份

​ 支持的五大数据类型:string、hash、list、set、zset

​ 如何将数据存入Redis数据?通过指令来存(每种数据类型存储都对应着一种指令)

​ 1)字符串:string是redis的最基本的类型,redis默认最大能够存储512M的数据 字符串的指令是set和get

​ (1)设置键值

​ 普通键值:set key value (如:set name 'wuyali')

​ 键的生存时间:setex key seconds 10 (如:setex sex 10 'M')

​ 设置多个键值:mset key value [key value ...]

​ (2) 获取 :get key

​ 获取多个:get key [key ... ]

​ (3) 运算 :要求值是字符串类型的数字

​ 加1:incr key

​ 减1:decr key

​ 加若干:incrby key intnum

​ 减若干:decrby key intnum

​ (4) 其他

​ 追加值: appned key value

​ 获取值得长度:strlen key

​ 2、key的操作

​ 1)查找键,参数支持正则

​ keys pattern

​ 2)判断是否存在

​ exists key

​ 3)查看key对应的value的类型

​ type key

​ 4)删除键及其对应的值

​ del key [key ... ]

​ 5)设置过期

​ expire key seconds

​ 6)查看有效时间

​ ttl key

​ 3、hash

​ hash在这里主要是存储对象(或者字典)

​ {

​ name:"JackMa",

​ age:18

​ }

​ 指令:hset

​ 1、设置

​ 设置单值:hset key field value (此时key代表数据中的键,值就是field value这个键值对)

​ 设置多值:hmset key field value [field value]

​ 2、获取

​ 获取一个属性的值:hget key field

​ 获取多个属性的值:hmget key field [field...]

​ 获取key对应的所有的属性和值:hgetall key

​ 获取所有的属性:hkeys key

​ 获取所有的值:hvals key

​ 其他指令:

​ hlen key

​ hexiste key field

​ hdel key field

​ 4、list类型: 列表的元素类型是string

​ ["qwer",'asdw','1234']

​ 1、设置

​ 在头部插入:lpush key value [ value....]

​ 在尾部插入:rpush key value [vlaue ...]

​ 在一个元素的前部|后部插入:linsert key before|after pivot value (如:linsert stars before 'A' 'B')

​ 设置指定索引的元素值

​ lset key index value

​ 2、获取

​ 1)移除并返回key对应的list的第一个元素:lpop key

​ 2)移除并返回key对应的list的嘴一个元素:rpop key

​ 3)返回存储在key的列表中的指定范围的元素:lrange key start end

​ llen key

​ lindex key index

​ ltrim key start end

​ 5、set : 无序集合,元素类型为string类型,元素不能重复

​ 添加元素:sadd key member [member ... ]

​ 获取:

​ 根据可以返回集合所有的元素:smembers key

​ 返回几个的元素个数:scard key

​ 运算

​ 交集:sinter key [key ... ]

​ 并集:sunion key [ key ... ]

​ 差集:sdiff key [key ...]

​ 判断元素是否在集合中:sismember key member

​ 6、zset : 有序集合,元素类型string,元素具有唯一性

​ 添加: zadd key score member [score member]

                (score 优先级别  索引顺序从0开始排)

​ 获取:zrange key star end

​ zcard key 获取个数

​ score的值在min和max之间的元素的个数: zcount key min max

​ 【注】在一个Redis链接中总共有16个数据,我们可以自主选择,指令如下:

​ select 0-15

4、分布式使用

​ scrapy_redis组件

​ pip install scrapy_redis

1、scrapy和scrapy_redis的区别

​ scrapy是一个通用的爬虫框架,不支持分布式

​ scrapy_redis就是为实现scrapy的分布式而诞生的,它里面提功了redis的组件,通过这些redis组件,就可以实现分布式

​ 2、官网案例

http://github.com/rmax/scrapy-redis

​ 三个样本

​ dmoz.py 传统的CrawlSpider,目的就是把数据保存在redis,运行方式 指令:scrapy crawl dmoz

​ myspider_redis.py 继承自RedisCrawlSpider,start_url被redis_key给取代了,其他地方不变

分布式爬虫开发的步骤:

​ 把原来普通的部署在分布式的系统上运行,就构成了分布式爬虫

​ 1、环境部署

​ scrapy: 爬虫运行的基础 (如果服务端不参与分布式的爬取可以不装)

​ scrapy_redis :组件(也可以认为是scrapy和redis交互的中间件),用于把scrapy爬虫和redis数据库联系起来

​ redis服务器:用于存储分布式爬虫爬取到的数据,一般情况下我们将redis服务器部署在Linux系统上,Windows上也可安装(但是这个服务不能用于生产环境);无论是在Linux上还是在Windows上,都必须配置其能够远程访问

​ 2、测试redis服务器是否联通

​ 如果ping了不PONG

​ 1)服务器没有配置远程连接

​ 2)服务器崩溃

​ 3)服务器出现冲突 config set stop-writes-on-bgsave-error no

​ 4)其他意外情况:http://www.baidu.com

​ 3、在普通的scrapy爬虫框架下去爬取,保证爬虫爬取的数据没有错误再去分布式系统上部署

​ 测试数据格式是否正确

​ 先测:json 目的主要是看代码是否有误 【比如:用xpath的时候路径写错等】

​ 再测redis 目的主要是看一下有木有系统级的错误 【如:redis服务器崩溃】

4、部署分布式

​ 服务器端(master端):

​ 可以用某一台主机作为redis服务器的运行方(即服务端),也称为master

​ 客户端(slaver端):

​ 1)把普通爬虫修改成分布式,去掉start_urls(不让slaver随意的执行),替换成redis_key(为了让master能够控制slaver的爬去)

2)修改自己配置文件,即在配置文件中加上scrapy_redis的组件

5、爬去
slaver端:首先要运行起来,等待master发出起始地址再开始
master端:在适当的时候像redis服务器中放入一个起始地址的列表

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容