搭建COOKIE池-存储模块
安装redis库
注意
- python终端直接pip install redis仅仅只是安装了库,还需要启动服务
- 启动服务:在GitHub上找到relase->点击最新版本的redis服务,下载安装
redis–储存key-value键值对的大字典型数据库
-
创建存储对象–redis.Redis(host=‘localhost’, port=6379,decode_response=True)
host=‘localhost’–固定写法
port=6379 – 固定写法
decode_response=True – 将字节结果转换为字符串,因为redis得到的结果为字节
-
创建相应的hash作为键值对的标识,一个hash下面可以有多个键值对,相当于给所有键值对取名
对象.hset(hash,键,值) 键为用户名,值为cookie
-
获取指定键对应的值
对象.hget(hash名称,键)
获取所有的键
对象.hkeys(hash名称)
获取所有的值
对象.hvals(hash名称)
获取所有的键值对
对象.hgetall(hash名称)
获取键值对的数量
对象.hlen(hash名称)
-
删除指定键名的键值对
对象.hdel(hash名称,键)
import redis
import random
class RedisClient:
def __init__(self, data_type, website, host='localhost', port=6379, password=None):
"""
创建redis对象,声明爬取网页及其类型
:param data_type: 网址类型
:param website:网址
:param host:启用redis固定写法
:param port:启用redis固定写法
:param password:启用redis密码,可不用传参
:param decode_response:将结果转换成字符串,因为redis取出的结果默认是字节,
"""
self.use_service = redis.StrictRedis(host=host, port=port, decode_responses=True)
self.data_type = data_type
self.website = website
self.password = password
# 设置hash名称
def name(self):
return f'{self.data_type}:{self.website}'
def add_username(self, username, value):
"""
添加用户名密码键值对
:param username: 用户名
:param value: cookie
:return: hash标识键值对
"""
# self.name()为hash,相当于键值对的标识,其名下可以有多个键值对
return self.use_service.hset(self.name(), username, value)
def get(self, username):
"""
获取键名对应的值
:param username: 用户名
:return: cookie
"""
return self.use_service.hget(self.name(), username)
def del_key(self, username):
"""
删除指定键名的键值对
:param username:
:return:
"""
return self.use_service.hdel(self.name(), username)
def count(self):
"""
获取hash中键值对的数量
:return:
"""
return self.use_service.hlen(self.name())
def choice_cookie(self):
"""
hvals方法获取所有的值
随机选择cookie
:return: cookie
"""
return random.choice(self.use_service.hvals(self.name()))
def all_username(self):
"""
获取所有的用户名
:return:以列表形式返回
"""
return self.use_service.hkeys(self.name())
def all_hash(self):
"""
获取所有的键值对
:return:以字典形式返回
"""
return self.use_service.hgetall(self.name())
def check(self, username):
"""
检查键值对是否成功存入
:param username:
:return:
"""
judge = self.use_service.hexists(self.name(), username)
if judge:
return '上传成功'
else:
return '上传失败'
if __name__ == '__main__':
boss = RedisClient('acounts', 'boss')
boss.add_username('ew58963efe', '123456')
print(boss.choice_cookie())