付费代理IP——Redis数据库的使用01
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,进出全都是二进制
字符串操作:String
Redis中存储String类型数据,按照:('数据库名', 'String数据')
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'表里数据
列表操作(存储数据用一个队列,一边进一边出):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®ions=').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®ions=').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相关推荐
- 付费代理IP——Redis数据库的安装
1.Redis数据库 参考网页:https://www.cnblogs.com/melonjiang/p/5342383.html Redis代理IP池:redis 是一个 Key-Value 数据库 ...
- 【Python 爬虫教程】付费代理IP与免费代理IP的区别是什么
网络上有很多厂商提供代理IP服务.其中,有免费版和付费版,这两者的区别是什么?下面就来为大家进行详细的介绍. 区别 成本:免费代理IP用户不需要成本,但是可用率低.付费代理IP则相反. 安全性:免费I ...
- 为什么推荐使用付费代理IP
我们都知道代理IP有"免费代理IP"和"付费代理IP",并且网络上找免费IP非常轻松,简简单单就可以找到非常多的免费IP.既然免费IP这么多,我们为什么要去使用 ...
- 教你如何优秀的选择付费代理ip的提供商
如今,许多场景下都需要使用到代理IP.比如: 1.快速推广产品: 2.收集竞争对手资料: 3.使用网络爬虫爬取数据: 虽然代理IP在日常工作中经常使用,但市场上太多选择,用户难以决定.有些人以为只要能 ...
- 从零开始构建自己的爬虫代理IP数据库并定期检验IP有效性...
ProxyIPPool 从零开始构建自己的代理IP池:根据代理IP网址抓取新的代理IP:对历史代理IP有效性验证 源码地址:https://github.com/TOMO-CAT/ProxyIPPoo ...
- 为什么最好是选择付费的代理IP而不是免费的代理IP?
随着社会科技的发展,人们对代理服务器的认可,越来越多的代理ip软件应运而生.但是对于ip代理软件来说,从宏观的角度来看,可以分为免费购买和付费购买两种不同的类型.两者的区别是什么? 优缺点在哪里?请看 ...
- python开源ip代理池_[技术]基于python实现的短效代理ip池程序
我们在写爬虫程序的时候,或者是抓取数据的时候,遇到一些发爬不是很厉害的网站,一般都是通过代理ip来实现绕过对方的反爬措施. 一般好的代理都是需要付费的,免费的代理速度慢,而且难找.市面上也有很多对应的 ...
- 使用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 ...
- Serverless 解惑——函数计算如何访问 Redis 数据库
函数计算(Function Compute):函数计算 是事件驱动的全托管计算服务.使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码.函数计算为您准备好计算资源,弹性地可靠地运行任务 ...
最新文章
- WinCE下串口虚拟软件
- POJ 3280 Cheapest Palindrome(DP 回文变形)
- JSTL(JSP Standard Tag Library)读书笔记
- python如何安装scrapy_Python爬虫之Scrapy的安装
- python在函数中传入多个实参
- c++判断二叉树是否为二叉搜索树_原创 | 好端端的数据结构,为什么叫它SB树呢?...
- 光线求交加速算法:kd-树
- 7、扫雷游戏地雷数计算
- php转化为2位小数的数字,学习猿地-php 转化为两位小数的方法
- LeetCode 72.编辑距离(动态规划)
- scala 主构造器_Scala主构造器深度
- 简述et代理换ip软件网络功能。
- BI_01_一个BI工具的痛点
- php 静态变量 引用,PHP的返回引用(方法名前加)和局部静态变量(static)
- 解决百度首页导航栏透明度问题
- 振荡电路设计原理与设计
- MySQL优化之hints
- 共享经济思考:标准化与个性化如何融合
- CTF 逆向之MD5短爆破
- Linux学习:sheel编程