1.Redis初尝试:

在完成Redis数据库安装后,启动Redis数据库,打开Redis Desktop Manager;
用Python连接数据库

r = redis.Redis(host='127.0.0.1', port=6379, db=1, decode_responses=True)  # 尽量别使用db0

host:Redis数据库地址
port:Redis数据库端口
db:Redis数据库第几数据库,尽量别使用db0数据库
decode_responses:规定Redis数据库数据出数据库的格式,True的话进出都是字符串;False,进出全都是二进制

  1. 字符串操作:String
    Redis中存储String类型数据,按照:('数据库名', 'String数据')

    1. Set('name', 'String'):往数据库中插入数据,一个字符型Redis数据库只能存放一个String
      name:表名;
      String:字符串,不限长
      Set()函数特别参数
      set(name, value, ex=None, px=None, nx=False, xx=False)
      ex,过期时间(秒)(若过期,Redis中name表也会被删除
      px,过期时间(毫秒)
      nx,如果设置为True,则只有name不存在时,当前set操作才执行
      xx,如果设置为True,则只有name存在时,当前set操作才执行
    r.set('Name', 'Lisi')   # 添加
    print(r.get('Name'))    # 获取'Name'表里数据
    
  2. 列表操作(存储数据用一个队列,一边进一边出):List

添加数据函数
lpush('表名', 数据):使每个新数据从列表左边插入
rpush('表名', 数据):使每个新数据从列表右边插入

import redisr = redis.Redis(host='127.0.0.1', port=6379, db=1)  # 尽量别使用db0
# list操作
r.lpush('list_name', 3, 4, 5)


函数插入时是从列表左端开始插入Redis数据库中的,()为插入顺序
lpush:数据添加是 5(3)–>4(2)–>3(1)

rpush:数据添加是3(1)–>4(2)–>5(3)

删除表内数据
r.lpop("表名"):将Redis数据库表取出,从表的左端删除数据,也就是第一项开始
r.rpop("表名"):将Redis数据库表取出,从表的右端删除数据,也就是最后一项开始

检查表内数据长度
llen(‘表名’):显示表内数据多少;
例子:

r.llen("list_name")

2.简单的例子:

import redis
import timer = redis.Redis(host='127.0.0.1', port=6379, db=1, decode_responses=True)  # 尽量别使用db0
# # list长度
print(r.llen("list_name"))
while True:if r.llen("list_name") < 10:r.rpush("list_name", 1, 2)  # 一次传出两个else:time.sleep(2)print('存储数据量已经大于10')

制造一个源源不断向Redis数据库中存储数据的程序:
若list_name表中数据长度llen(“list_name”) < 10个数据:
则源源不断往输入数据,一次传入两个——1,2
如果不是,数据大于10
就显示存储数据量已经大于10

3.Redis简单的项目

代理IP传入

import redis
import requests
from lxml import etree
import time# 存Redis数据库
r = redis.Redis(host='127.0.0.1', port=6379, db=1, decode_responses=True)print(r.llen("list_IP"))
while True:if r.llen("list_IP") < 5:source = requests.get('http://webapi.http.zhimacangku.com/getip?num=2&type=2&pro=&city=0&yys=0&port=11&time=1&ts=0&ys=0&cs=0&lb=1&sb=0&pb=4&mr=1&regions=').json()# num=2 显示一次返回2个IPprint(source)for i in source['data']:print(i)ip = i['ip']port = i['port']r.rpush("list_IP", str(ip) + ":" + str(port) + '|0')    # 增加计数|0else:print('正在补充IP,现有数量', r.llen("list_IP"))time.sleep(2)

获取付费代理IP

source = requests.get('http://webapi.http.zhimacangku.com/getip?num=2&type=2&pro=&city=0&yys=0&port=11&time=1&ts=0&ys=0&cs=0&lb=1&sb=0&pb=4&mr=1&regions=').json()

链接中,num=2代表一次返回两个数据,若num=1则返回一个代理IP
返回实例:
返回的是一个字典dict
source[‘data’],找到source里的data
并把两个代理IP提取出来

      {"code":0,"success":true,"msg":"0","data":[{"ip":"49.68.68.197","port":33220,"expire_time":"2019-05-24 08:58:31","city":"徐州市","isp":"电信"},{"ip":"58.218.201.108", //隧道ip (代理ip)"port":2690,           // 代理端口"expire_time":"2019-05-24 08:55:31","city":"苏州市","isp":"电信","outip":"219.136.47.161",  // 隧道ip的出口ip}]}

增加代理IP访问问题机制str(port) + '|0') 用 0 来进行计数
使用rpush()传入Redis数据库list_IP表里

r.rpush("list_IP", str(ip) + ":" + str(port) + '|0')

验证代理IP

验证网页:https://2022.ip138.com/

网页需要经过headers验证

import requests
from lxml import etree
import redis
import time# 需要加headers头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36'
}r = redis.Redis(host='127.0.0.1', port=6379, db=1, decode_responses=True)
for i in range(5):rr = r.lpop('list_IP').split('|')    # 将list_IP通过"|"分开# 112.194.89.213:4245|0# rr = [112.194.89.213:4245, 0]ip = rr[0]num = int(rr[1])  # 计数proxies = {'https': 'http://' + ip}print(proxies)try:response = requests.get('https://2022.ip138.com/', headers=headers, proxies=proxies, timeout=5)  # 加headers头,proxy代理, timeout=5设置超时时间5sexcept:num = num + 1if num < 3:r.rpush("list_IP", ip + '|' + str(num))print('请求失败', ip + '|' + str(num))else:print('舍弃', ip)continuesource = response.text     # 显示资源内容content = etree.HTML(source).xpath('/html/body/p[1]//text()')    #爬取整个网页html源码print(content)print(type(response.status_code))   # 看状态码字符类型if response.status_code == 200:  # 若访问成功r.rpush("list_IP", ip + '|' + '0')  # 若成功一次则将之前失败数据全部清除else:num = num + 1if num < 3:r.rpush("list_IP", ip + '|' + str(num))else:print('舍弃', ip)

在目标网页上使用代理IP

response = requests.get('https://2022.ip138.com/', headers=headers, proxies=proxies, timeout=5)
# 加headers头,proxy代理, timeout=5设置超时时间5s

timeout=5——设置代理IP转载期限,超过5s则为劣质IP得舍弃
proxies=proxies——传入的代理IP

    proxies = {'https': 'http://' + ip # 前必须为'https'}

取出IP,再将IP放回:
我们定义一个num来查看IP是否访问成功,若成功则num=0,若不成功,则num+1;当num超过3时,就代表该IP为劣质IP,则从Redis数据库中舍弃;

付费代理IP——Redis数据库的使用01相关推荐

  1. 付费代理IP——Redis数据库的安装

    1.Redis数据库 参考网页:https://www.cnblogs.com/melonjiang/p/5342383.html Redis代理IP池:redis 是一个 Key-Value 数据库 ...

  2. 【Python 爬虫教程】付费代理IP与免费代理IP的区别是什么

    网络上有很多厂商提供代理IP服务.其中,有免费版和付费版,这两者的区别是什么?下面就来为大家进行详细的介绍. 区别 成本:免费代理IP用户不需要成本,但是可用率低.付费代理IP则相反. 安全性:免费I ...

  3. 为什么推荐使用付费代理IP

    我们都知道代理IP有"免费代理IP"和"付费代理IP",并且网络上找免费IP非常轻松,简简单单就可以找到非常多的免费IP.既然免费IP这么多,我们为什么要去使用 ...

  4. 教你如何优秀的选择付费代理ip的提供商

    如今,许多场景下都需要使用到代理IP.比如: 1.快速推广产品: 2.收集竞争对手资料: 3.使用网络爬虫爬取数据: 虽然代理IP在日常工作中经常使用,但市场上太多选择,用户难以决定.有些人以为只要能 ...

  5. 从零开始构建自己的爬虫代理IP数据库并定期检验IP有效性...

    ProxyIPPool 从零开始构建自己的代理IP池:根据代理IP网址抓取新的代理IP:对历史代理IP有效性验证 源码地址:https://github.com/TOMO-CAT/ProxyIPPoo ...

  6. 为什么最好是选择付费的代理IP而不是免费的代理IP?

    随着社会科技的发展,人们对代理服务器的认可,越来越多的代理ip软件应运而生.但是对于ip代理软件来说,从宏观的角度来看,可以分为免费购买和付费购买两种不同的类型.两者的区别是什么? 优缺点在哪里?请看 ...

  7. python开源ip代理池_[技术]基于python实现的短效代理ip池程序

    我们在写爬虫程序的时候,或者是抓取数据的时候,遇到一些发爬不是很厉害的网站,一般都是通过代理ip来实现绕过对方的反爬措施. 一般好的代理都是需要付费的,免费的代理速度慢,而且难找.市面上也有很多对应的 ...

  8. 使用proxy_pool来为爬虫程序自动更换代理IP

    文章目录 1. 前言 2. 教程 3. 官网 4. 在线demo 4.1. 本地部署 4.2. 安装 4.2.1. Python源码构建安装 4.2.1.1. 安装redis数据库 4.2.1.1.1 ...

  9. Serverless 解惑——函数计算如何访问 Redis 数据库

    函数计算(Function Compute):函数计算 是事件驱动的全托管计算服务.使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码.函数计算为您准备好计算资源,弹性地可靠地运行任务 ...

最新文章

  1. WinCE下串口虚拟软件
  2. POJ 3280 Cheapest Palindrome(DP 回文变形)
  3. JSTL(JSP Standard Tag Library)读书笔记
  4. python如何安装scrapy_Python爬虫之Scrapy的安装
  5. python在函数中传入多个实参
  6. c++判断二叉树是否为二叉搜索树_原创 | 好端端的数据结构,为什么叫它SB树呢?...
  7. 光线求交加速算法:kd-树
  8. 7、扫雷游戏地雷数计算
  9. php转化为2位小数的数字,学习猿地-php 转化为两位小数的方法
  10. LeetCode 72.编辑距离(动态规划)
  11. scala 主构造器_Scala主构造器深度
  12. 简述et代理换ip软件网络功能。
  13. BI_01_一个BI工具的痛点
  14. php 静态变量 引用,PHP的返回引用(方法名前加)和局部静态变量(static)
  15. 解决百度首页导航栏透明度问题
  16. 振荡电路设计原理与设计
  17. MySQL优化之hints
  18. 共享经济思考:标准化与个性化如何融合
  19. CTF 逆向之MD5短爆破
  20. Linux学习:sheel编程

热门文章

  1. Java 验证回文串
  2. Fidder基础知识
  3. (C)problem1:C语言阶乘求和
  4. Exynos_4412——轮询与中断
  5. python中列表(list)的基本定义和用法
  6. Android 友盟统计 友盟推送 友盟分享快速集成
  7. 监控文件变化 (Python—看门狗)
  8. NSN 内部推荐 -- 不能从电子邮件地址认证身份和来源.
  9. urlwrite------url地址重写
  10. vscode python环境变量_VScode配置Python开发环境