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

5 篇文章 0 订阅
3 篇文章 0 订阅

这半个月停更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 多台电脑怎么保证数据存到同一个地方呢

在这里插入图片描述

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的指纹

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笔记本IT

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值