Python代理IP的使用和代理池的设置

news2024/10/5 1:26:20

熟悉python的人都知道为了python的正常请求,维持数据的稳定获取,都会用到代理IP。代理IP不仅可以用来规避IP在单位时间的请求次数,还可以借助代理来隐藏真实的IP,避免出现“IP请求过于频繁”,“403”等报错。今天就带大家简单了解一下Python代理IP的使用和代理池怎么设置。

 

一、什么是代理

代理一般指的是代理服务器Proxy Server,它的作用就是代理网络用户获取信息。就像是一个请求的中转站,代理服务器就是请求端与目标网站之间的一个中转。使用代理之后将不是直接请求目标网站,用户的Request信号会先送到代理服务器,由代理服务器来取回所需要的信息并传送给用户。此时的被请求的目标网站所识别的IP就不是用户真实的本地IP,而是代理IP地址。这就是代理的基本原理。

二、代理的作用

1、突破自身IP访问限制访问其他不能访问的站点。

2、访问一些单位或团体的内部资源,比如教育网的FTP资源。

3、提高访问速度。代理服务器通常有一个较大的硬盘缓冲区,请求信息通过后将会保存在缓冲区内。如果其他的用户访问相同的信息,这时返回的内容将从缓冲区直接返回,提高访问速度。

4、隐藏真实IP,可以利用代理服务器隐藏自己的真实IP信息。

三、 Python requests如何使用代理

python的requests请求设置代理只需要传递一个参数:proxies即可

import  requests
proxies = {
	'http':'http://ip:port',
	'https':'http://ip:port',
}
res = requests.get("https://ipinfo.io/",proxies = proxies)
print(res.json())

返回内容如下

{
  "ip": "203.160.80.166",
  "city": "Hong Kong",
  "region": "Central and Western",
  "country": "HK",
  "loc": "22.2783,114.1747",
  "org": "AS10099 China Unicom Global",
  "timezone": "Asia/Hong_Kong",
  "readme": "https://ipinfo.io/missingauth"
}

四、代理池的设置

代理池就是将代理服务器的IP存储到临时数据库中,实现随用随取。既可以将免费的代理网站的IP及时存进去,也可以避免了收费代理api的请求限制。

1.如何设计代理池

代理池一般分为三个部分:收集代理,存储代理和使用代理,从收集到存储或者是从存储到使用,期间可以对使用的代理做检测,本文暂不提及。

收集代理:就是指从指定的目标源获取到代理服务器的IP之后存到历史数据库。

存储代理:负责存储从目标网站的代理服务器IP,通常使用redis。

使用代理:直接从临时数据库获取提取过来的IP或者以接口的形式返回。

2.收集和存储代理

本次使用的是redis的列表(List)对代理进行存储,当然对去重有要求的话可以使用redis的有序集合(sorted set)

在redis数据库中建立一个叫做“Proxy”的list,将获取到的IP进行存储:

import requests
import redis

redisHost = '127.0.0.1'
redisPort = 6379
redisPool = redis.ConnectionPool(host=redisHost, port=redisPort, password='', db=1)
redisCon = redis.Redis(connection_pool=redisPool)

def get_IP():
    IpApi = "url"
    res = requests.get(IpApi).json()["data"]
    for ip in res:
        ipInfo = f"http://{ip['ip']}:{ip['port']}"
        redisCon.rpush("Proxy",ipInfo)

if __name__ == '__main__':
    get_IP()

这里使用的是ipidea的代理api,将获取的服务器地址存入了redis的列表中:

3.使用代理

使用代理的话就从redis的Proxy队列,使用redis的pop方法取到服务器IP:

def GetIpFromRedis():
    serverIp = redisCon.lpop("Proxy")
    print(serverIp.decode())

4.可持续化代理池

为了保证代理池的IP量位置在某一水平,可以使用redis中的llen方法对队列的长度进行检测。使用while循环,如果IP量低于一定的阈值就获取代理地址并存储,否则就跳过本次while循环:

def get_IP():
    while True:
        if redisCon.llen("Proxy") < 100:
            IpApi = "url"
            res = requests.get(IpApi).json()["data"]
            for ip in res:
                ipInfo = f"http://{ip['ip']}:{ip['port']}"
                redisCon.rpush("Proxy",ipInfo)
        else:
            pass

五、总结

在互联网不断发展,信息数据庞大的今天,python已经取代了过去传统的依靠人力搜集信息的方式,成为了目前最为主流的数据获取方法。使用代理IP并不是抓取数据的唯一方法,但它为python带来了诸多好处,是python最可靠的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/136519.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

甲方安全之仿真钓鱼演练(邮件+网站钓鱼)

文章目录一、简介1.1 前言1.2 整体思路1.3 演练所需1.4 各邮件厂商日群发上限二、钓鱼平台搭建及配置2.1 gophish平台搭建2.2 收件目标配置&#xff08;User & Groups&#xff09;2.3 发信邮箱配置&#xff08;Sending Profiles&#xff09;2.4 邮件模版配置&#xff08;Em…

Windows下socket网络编程,C++,Email的客户端程序(支持邮件基于SMTP的发送和POP3的接收)

阅读前请看一下&#xff1a;我是一个热衷于记录的人&#xff0c;每次写博客会反复研读&#xff0c;尽量不断提升博客质量。文章设置为仅粉丝可见&#xff0c;是因为写博客确实花了不少精力。不用担心你关注我而我却不关注你&#xff0c;因为我是个诚信互关的人&#xff01;&…

linux--管道

这里写自定义目录标题基本概念管道特征编写模型有名管道模型示例demowrite.cread.c结果无名管道基本概念 进程间存在天然的壁垒,进程间通信(Interperocess Communication,IPC)是指二个或者多个进程之间进行数据交换的过程 管道特征 管道是进程间通讯的一种常用方法。管道分为…

MyISAM 引擎和 InnoDB 引擎中索引存储的区别

一、MyISAM 引擎下的索引 MyISAM 存储引擎不支持行级锁&#xff0c;只有表级锁&#xff1b;不支持事务&#xff0c;也不支持外键&#xff0c;主要面向 OLAP 应用&#xff0c;是 MySQL 数据库5.5.8 版本之前默认的存储引擎&#xff0c;MyISAM 适用于不需要关心事务&#xff0c;…

实时即未来,大数据项目车联网之原始数据实时ETL任务HBase调优【九】

1. 原始数据实时ETL任务HBase调优 1.1 数据写入hbase优化 上一节写入数据,一条条数据put到表中,对于大量数据的写入,效率极低,因此针对此项进行优化 使用hbase客户端写缓存进行批量写入数据到hbase中 hbase客户端写缓存对象:BufferedMutator hbase的每一次put操作写入数据…

CSS权威指南(二)选择符

1.样式的基本规则 CSS的一个核心优势就是可以为文档中某种种类的元素全部应用相同的样式规则。CSS样式便于修改和编辑&#xff0c;而且能应用到指定的所有文本元素上。 &#xff08;1&#xff09;元素选择符 即直接使用元素的名称进行选择&#xff0c;类似于p{ font-size:10px…

Lc.152 乘积最大子数组

题目链接1 前言翻译成大白话&#xff1a;就是找一个数组&#xff0c;其连续子数组的乘积最大值。2 算法思路&#xff1a;一般求最值的问题首选动态规划。这道题与[LC.53 最大子序和]很类似。我们假设状态转移方程为:它表示以第 i 个元素结尾乘积最大子数组的乘积可是在这里&…

异步通信技术AJAX | AJAX实现省市联动、AJAX跨域问题

目录 一&#xff1a;异步通信技术AJAX | 快速搞定AJAX&#xff08;第四篇&#xff09; 1、AJAX实现省市联动 2、超链接、form表单和JS代码跨域 3、AJAX跨域问题 &#xff08;1&#xff09;测试Ajax跨域访问 &#xff08;2&#xff09;同源 & 不同源 &#xff08;3&a…

可以通过哪些方式了解量化接口level2?

可以通过哪些方式了解量化接口level2&#xff1f;大家可以去百查看关于量化交易接口的信息&#xff0c;根据小编对市场上大多数的level2接口了解发现既有要收费的也有免费的&#xff0c;一般来说第三方软件公司提供的都是收费的居多&#xff0c;一些正规券商提供的就是免费的居…

一文读懂自动驾驶汽车:软硬结合 造就未来出行体验(下篇)

在上篇&#xff0c;我们回顾了自动驾驶汽车的发展历史&#xff0c;介绍了自动驾驶汽车的工作原理。得益于 AI 技术的突破&#xff0c;自动驾驶汽车飞速发展&#xff0c;运算速度也从 2007 年的 230 FLOPS 跃升至 2022 年的 254 TOPS&#xff0c;向软件定义汽车发展。现在&#…

数据结构-考研难点代码突破 (C++实现有向无环图的拓扑排序)

文章目录1. AOE网2. 拓扑排序C代码1. AOE网 AOV网∶若用DAG 图&#xff08;有向无环图&#xff09;表示一个工程&#xff0c;其顶点表示活动&#xff0c;用有向边<Vi&#xff0c;Vj>表示活动 Vi必须先于活动Vj进行的这样一种关系&#xff0c;则将这种有向图称为顶点表示…

基于主从博弈的智能小区代理商定价策略及电动汽车充电管理(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

C语言贪吃蛇大作战

C语言贪吃蛇大作战 贪吃蛇大作战 1997 年&#xff0c;诺基亚公司发布了贪吃蛇游戏&#xff0c;并将其内置于诺基亚 6110 手机中&#xff0c;使这款游戏迅速风靡全球&#xff0c;成为一代经典。一般的观点认为&#xff0c;贪吃蛇是手机游戏的鼻祖。 与传统单人贪吃蛇不同的是&…

【时间之外】系统管人,能行?(冷眼旁观连载之一)

目录 写作初心 在用工具 某微 某道 某书 工具痛点 某微痛点 某道痛点 某书痛点 总结一下&#xff1a;功能复杂 2023年观察计划 最大痛点 效果跟踪 未完待续 写作初心 2022年应该是这一生中值得纪念的一年&#xff0c;疫情封控自不必说&#xff0c;对于个人而言&a…

traefik gateway api

背景 在使用istio后开始考虑网关了&#xff0c;istio已经有自己的网关&#xff0c;为什么还要另外找一个别的网关&#xff0c;参考了好几个文章大致结论是&#xff0c;istio的网关功能不够强大&#xff0c;下图红色的部分是istio网关暂时缺失的&#xff0c;所以我的结论是在is…

Monorepo 下 Git 工作流的最佳实践

作者&#xff1a;林宜丙 背景 没有哪一种 Git 工作流是银弹&#xff0c;合适的 Git 工作流往往取决于项目的代码规模、协作人数、应用场景等&#xff1b;本次分享先从适合小型 Monorepo 的 Feature branch 工作流开始分享&#xff0c;接着分享适用于中大型 Monorepo 的 Trunk…

头歌:Ping客户端创建原始套接字(底部附全关完整答案)

头歌实践教学平台 (educoder.net)为Ping客户端创建一个原始类型的套接字原始套接字套接字&#xff08;socket&#xff09;是一个抽象层网络应用程序可以通过它发送或接收数据&#xff0c;可对其进行像文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中&a…

<C++>二叉树进阶

文章目录为什么要学这一节1. 二叉搜索树1.1 二叉搜索树概念1.2 二叉搜索树操作1.3 二叉搜索树的实现1.4 二叉搜索树的应用1.5 二叉搜索树的性能分析2. 经典题目2.1 最近公共祖先2.2 从前序与中序遍历序列构造二叉树2.3 二叉树的前序遍历&#xff08;非递归&#xff09;为什么要…

计算机组成原理复习:数据的表示和运算

计算机组成原理复习&#xff1a;数据的表示和运算2. 数据的表示和运算2.1 数制与编码2.1.1 数制&#xff1a;进位计数制及其相互转换2.1.2 编码&#xff1a;数值数据的编码与表示2.1.2.1 逻辑型数据2.1.2.2 字符型数据 之 ASCII码2.1.2.3 数值型数据 之 BCD码2.1.3 校验码——奇…

Part类 -- 上传文件

Part类 -- 上传文件一、核心方法1.1 HttpServletRequest 类方法1.2 Part 类方法二、代码示例前端搭配 form 表单&#xff1a;form input type “file”&#xff0c;允许通过浏览器选中一个文件上传给服务器。 Servlet 就支持处理这种上传文件的请求&#xff0c;把这个请求到的文…