2021/6/15爬虫第二十四次课(redis常用五大数据类型--set与zset、python操作redis、scrapy分布式爬虫实现)

这半个月停更python的学习内容,是因为准备期末考试,害。
现在考完了,今天开始将疯狂学python和java, 哈哈。
期间学到的心得和体会,我都会毫无保留的分享,请大家多多关照
よろしくお願いします 잘 부탁드립니다. I’d appriciate your attention for our first meeting

文章目录

一、redis-set

无序不重复
sadd s2 xxoo ooxx xoxo xoox 添加数据
SMEMBERS s2 查询数据
SISMEMBER s2 xxoo 验证元素是否存在 1就是存储 0就是不存在
scard s2 查询集合中元素的个数
SRANDMEMBER s1 随机取值
spop s1 随机删除
smove s2 s3 xoox 删除s2中的xoox添加到s3中
SMEMBERS s2 查询数据
SISMEMBER s2 xxoo 验证元素是否存在 1就是存储 0就是不存在
scard s2 查询集合中元素的个数
SRANDMEMBER s1 随机取值
spop s1 随机删除
smove s2 s3 xoox 删除s2中的xoox添加到s3中

二、redis-zset

有序不重复
它需要一个分数​
zadd z2 70 juran 60 jerry 80 tony 90 amy 添加数据
zrange z2 0 -1 查看数据
zrange z2 0 -1 withscores 带分数查询
ZRANGEBYSCORE z2 60 90 根据范围来查找
ZRANGEBYSCORE z2 (70 90  去掉70的数据

三、python操作redis

第一步 安装 redis
第二步 python操作redis
1 导入redis
2 链接reids  --> 链接地址 端口号
3 逻辑实现(增删改查)

更多案例看语雀

import redis

class StringRedis():
    def __init__(self):
        self.r = redis.StrictRedis(host='127.0.0.1',port=6379,decode_responses=True)
        # self.r = redis.Redis()

    def string_set(self,k,v):
        res = self.r.set(k,v)
        print(res)


    def string_get(self,k):
        res = self.r.get(k)
        return res

if __name__ == '__main__':
    s = StringRedis()
    s.string_set('name','gaohe')
    print(type(s.string_get('name')))
    print(s.string_get('name'))

四、scrapy分布式爬虫实现

学习目标
1 了解scrapy-redis的工作流程(面试)
2 会把普通的scrapy爬虫改写成分布式爬虫(了解,重点在后面的mongodb)

4.1 什么是scrapy_redis

问:scrapy和scrapy-redis有啥区别?
scrapy python的爬虫框架 爬取效率极高 具有高度的定制型,不支持分布式
scrapy-redis 基于redis数据库 运行在scrapy之上的一个组件 可以让scrapy支持分布式开发了 支持主从同步

4.2 scrapy-redis的工作流程

分布式 多个人在一起做不同的事
集群 多个人在一起做相同的事

分布式爬虫的优点
1 可以充分利用多个机器的带宽
2 可以充分利用不同电脑的ip
3 多台机器爬取效率更高
​
于此同时就会有问题
1 多台电脑我怎么保证数据不会出现重复的
2 多台电脑怎么保证数据存到同一个地方呢

2021/6/15爬虫第二十四次课(redis常用五大数据类型--set与zset、python操作redis、scrapy分布式爬虫实现)

4.3 如何实现分布式爬虫(步骤)

第一步 创建scrapy项目
第二步 编辑爬虫文件和settings文件
第三步 逻辑操作
​
编辑爬虫文件:
1 模块
2 继承的父类
3 把start_urls 改写成 reids_key='爬虫文件名字'
4 settings文件当中的内容

编辑settings文件
# 去重过滤
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# scheduler队列
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 数据持久化
SCHEDULER_PERSIST = True
​
ITEM_PIPELINES = {
    'example.pipelines.ExamplePipeline': 300,
    'scrapy_redis.pipelines.RedisPipeline': 400,
}
运行结束后redis中多了三个键
dmoz:requests   存放的是待爬取的requests对象 
dmoz:item       爬取到的信息
dmoz:dupefilter 爬取的requests的指纹

2021/6/15爬虫第二十四次课(redis常用五大数据类型--set与zset、python操作redis、scrapy分布式爬虫实现)

上一篇:scrapy爬取图片(以汽车之家的图片为例子)


下一篇:爬虫应用开发(python课程设计Ⅰ)