使用python操作Redis

1:使用python操作Redis的步骤

2.1:安装Redis

  • pip install redis

2.2:导入reids

  • import redis

2.3:连接redis

  • 需要记住redis的端口号和地址
    • 端口号:127.0.0.1
    • 地址:6379

方法一

redis.strictRedis(host='127.0.01, port=6379)

方法二

redis.Redis(host='127.0.0.1', port=6379)

2.4:逻辑实现

  • 这一步主要是实现如何使用python来操作Redis数据库的
  • 添加操作Redis的方法
    • 设置添加Redis-srting数据的方法
redis.set(key, value)
- 设置获取Redis-srting数据的方法
redis.get(key)
	- 返回的数据类型为一个字节流
	- 在python中一般返回数据的前面带有一个b返回的就是一个字节流
	- 解决字节流的方法
	- 1:使用srt()方法,对字节流进行强制类型转化
	- 2:通过设置方法中的参数respose_decode=Tres,来实现解码操作,把字节流改为字符串的类型
  • 注意:在使用get方法的时候,得到的是一个redis对象,所以在返回的时候一定要是redis的调用

2:scrapy-redis

2.1:学习目标

  • 1:了解scrapy-redis是如何工作的
  • 2:学会如何把一个普通的网络爬虫给改写为一个分布式爬虫

2.2:scrapy-redis的工作流程

  • scrapy-redis的工作流程其实和scrapy的工作流程差不多,只不过是当中的一些步骤有一些改变而已
  • 改变步骤一:原本scrapy框架的调度器要处理url入列和出列由redis中的调度器来完成,这个时候的scrapy中的调度器只是起了一个连接redis和scrapy的一个中间程序,只是用来把原来引擎分配给自己的url给redis中的调度器,再把调取器返回的url给引擎让其分配给下载中间件处理数据。
  • 改变步骤二:原来要存储在管道的数据直接发送给redis,scrapy不存储数据,数据全都存储到redis数据库中了

2.3:redis数据库中需要存储的数据

  • 由2.2可以知道redis存储的数据至少要有爬取后的数据和要爬取的url以及待爬取的url

2.4:名词解释

分布式

  • 多个人在一起干这不一样的事情

集群

  • 多个人在一起干这一样的事情

3:scrapy与scrapy-redis的区别

scrapy

  • python的一个爬虫框架,爬取效率极高,具有高度的定制性,不支持分布式

scrapy-redis

  • 基于redis的一个数据库,运行在scrapy的一个组件,可以支持scrapy分布式,支持主从同步技术

4:分布式的优点

优点

  • 1:可以充分利用每一台机器的带宽
  • 2:可以充分利用每一台机器的IP地址
  • 3:多台机器爬取的效率高

问题

  • 1:多台机器进行爬取的时候怎末保证不会爬取相同的数据
  • 2:怎么把数据存储到一个相同的地方

解释

  • 这些问题都已经在redis中处理好了,所以这些问题都不是问题

5:如何把一个普通爬虫改写为分布式爬虫

  • 只是简单的介绍一下步骤

5.1:通过分析已经分布式爬虫来学习改写

  • 1 我们发现需要安装 pip install scrapy-redis
  • 2 settings文件 学文大了 好多地方和我们的不一样,当中由一些配置和普通的scrapy爬虫不同
  • 3 尝试的运行了一下这个爬虫文件 发现redis里面多了3个文件
    • dmoz:items --> 爬取得到的数据
    • dmoz:requests --> 带爬取的数据,一个有序不重复的集合,做了序列化的操作
    • dmoz:dupefilter --> 已经爬取过的数据,一个无序不重复的集合,使用了hash进行了处理

5.1:改写步骤

1:创建scrapy项目

  • 先创一个普通的scrapy爬虫,然后改写为一个分布式爬虫

2: 改写爬虫文件

  • 2.1:安装库
    • 需要事先检查一下自己是否安装了scrapy-redis库
    • 安装代码
pip install scrapy-redis
  • 2.2:改写爬虫文件
    • 添加模块:from scrapy_redis.spiders import RedisSpider
    • 改写类所继承的父类为:
class DangdangSpider(RedisSpider)
 - 把start_urls 改写成 reids_key='爬虫文件名字'
  • 2.2:改写setting文件中的内容
# 去重过滤
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# scheduler放到redis中的调度器中
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 数据持久化
SCHEDULER_PERSIST = True
​
# 管道改写
ITEM_PIPELINES = {
    'example.pipelines.ExamplePipeline': 300,
    'scrapy_redis.pipelines.RedisPipeline': 400,
}

3:逻辑操作

  • 普通爬虫的逻辑编写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值