利用 Flask+Redis 维护 IP 代理池

Python爬虫实战Pro | (4) 用Flask+Redis维护代理池 在本篇博客中,我们将使用Flask+Redis维护代理池。在之前的Python爬虫实战(18)中,我们曾搭建过IP代理池,本次搭建的IP代理池是对之前的升级,获取代理的范围更加广泛。 目录 1. 为什么要用代理池? 2. 代理池要求 3. 代理池架构 4. 代理池的实现 5. 使用方法 6. 完整项目 1. 为什么要用代理池? 许多网站有专门的反爬⾍措施,可能遇到封IP等问题。使... 阅读详情

代理池的维护

目前有很多网站提供免费代理,而且种类齐全,比如各个地区、各个匿名级别的都有,不过质量实在不敢恭维,毕竟都是免费公开的,可能一个代理无数个人在用也说不定。所以我们需要做的是大量抓取这些免费代理,然后筛选出其中可用的代理存储起来供我们使用,不可用的进行剔除。

获取代理途径

维护一个代理池第一步就是要找到提供免费代理的站点,例如PROXY360,网页内容如下:

可以看到网页里提供了一些免费代理列表,包括服务器地址、端口、代理种类、地区、更新时间等等信息。

当前我们需要的就是代理服务器和端口信息,将其爬取下来即可。

维护代理

那么爬取下代理之后怎样保存呢?

首先我们需要确保的目标是可以边取边存,另外还需要定时检查队列中不可用的代理将其剔除,所以需要易于存取。

另外怎样区分哪些是最新的可用的,哪些是旧的,如果用修改时间来标注是可以的,不过更简单的方法就是维护一个队列,只从一端存入,例如右端,这样就能确保最新的代理在队列右端,而在左端则是存入时间较长的代理,如果要取一个可用代理,从队列右端取一个就好了。

那么对于队列的左端,不能让它一直老化下去,还需要做的操作就是定时从队列左端取出代理,然后进行检测,如果可用,重新将其加入右端。

通过以上操作,就保证了代理一直是最新可用的。

所以目前来看,既能高效处理,又可以做到队列动态维护,合适的方法就是利用Redis数据库的队列。

可以定义一个类来维护一个Redis队列,比如get方法是批量从左端取出代理,put方法是从右端放入可用代理,pop方法是从右端取出最新可用代理。

import redis
from proxypool.error import PoolEmptyError
from proxypool.setting import HOST, PORT

class RedisClient(object):
    def __init__(self, host=HOST, port=PORT):
        self._db = redis.Redis(host, port)

    def get(self, count=1):
        proxies = self._db.lrange("proxies", 0, count - 1)
        self._db.ltrim("proxies", count, -1)
        return proxies

    def put(self, proxy):
        self._db.rpush("proxies", proxy)

    def pop(self):
        try:
            return self._db.rpop("proxies").decode('utf-8')
        except:
            raise PoolEmptyError

检测代理

那么如何来检测代理是否可用?可以使用这个代理来请求某个站点,比如百度,如果获得正常的返回结果,那证明代理可用,否则代理不可用。

conn = RedisClient()
proxies = {'http': proxy}
r = requests.get('https://www.baidu.com', proxies=proxies)
if r.status_code == 200:
    conn.put(proxy)

例如在这里proxy就是要检测的代理,使用requests库设置好这个代理,然后请求百度,正常请求,那就可以将这个代理存入Redis。

获取可用代理

现在我们维护了一个代理池,那么这个代理池需要是可以公用的。

比如现在有多个爬虫项目都需要用到代理,而代理池的维护作为另外的一个项目,他们之间如果要建立连接,最恰当的方式就是接口。

所以可以利用Web服务器来实现一个接口,其他的项目通过请求这个接口得到内容获取到一个可用代理,这样保证了代理池的通用性。

所以要实现这个还需要一个Web服务器,例如Flask,Tornado等等。

例如使用Flask,定义一个路由,然后调用的RedisClient的pop方法,返回结果即可。

@app.route('/')
def get_proxy():
    conn = RedisClient()
    return conn.pop()

这样一来,整个程序运行起来后,请求网页就可以看到一个可用代理了。

使用代理

使用代理时只需要请求这个站点,就可以拿到可使用的代理了。

def get_proxy():
    r = requests.get('http://127.0.0.1:5000')
    return r.text

def crawl(url, proxy):
    proxies = {'http': get_proxy()}
    r = requests.get(url, proxies=proxies)
    # do something

可以定义一个简单的方法,返回网页内容即代理,然后在爬取方法里设置代理使用即可。

样例实现

https://github.com/Germey/ProxyPool

此文已由作者授权腾讯云技术社区发布,转载请注明文章出处

搭建一个基于flask和redis的代理池(proxy pool) 在进行网页爬虫的项目时,常常会因为爬取的频率过高而触发 反爬虫机制 ,这时候,面临两个选择: 休息片刻。一般反爬虫机制不会进行永久的IP封禁,只是暂时限制访问而已,等待封禁时间结束再进行爬取即可。当然对于某些拥有黑名单机制的网站,如果封禁次数过多,封禁的时间也会随着这个次数而提高。 更换IP。既然我的IP被封了,那么我换一个其他的IP不就行了。 显然,第二种方法更优于第一种,并且更加符合gee... 阅读详情

相关推荐

运用Redis和Flask动态维护IP代理池 -- 系统详解 & 代码分析

本文针对动态代理池myProxyPool(GitHub)源码进行系统分析与代码解读,提供完整源码共大家一同交流学习,也欢迎对该项目多多指正,提出宝贵的意见~ 1 动态代理池结构 1.1 目录结构 1.2 系统要求与模块间关系 1.2.1 动态代理池需具有的功能 1.2.2 各大模块间的关系 1 动态代理池结构 1.1 目录结构 通过tree -CF命令查看...

ZhouJL 2862

flask使用redis

文章目录前言一、环境二、使用步骤1.安装redis1.下载2.运行2.安装并使用redis包1.安装2.使用运行 前言 有人会有疑问,不是已经连上了mysql数据库了吗,为什么还要用redis数据库?有时候用户访问网页的时候,会产生一些临时性的数据,如验证码等,如果使用mysql存储,那么还要另外新建一张表,还要定时清理表中的验证码,使用mysql操作太麻烦了。正好redis可以解决这个问题,下面通过生成验证码的例子来学习一下。 一、环境 python 3.7 flask 2.0.2 二、使用步骤 本篇

fresh_nam的博客 8437

从零开始:kohya_ss环境部署与LoRA/SDXL模型训练实战指南

本文提供了一份详细的kohya_ss环境部署与模型训练实战指南。从零开始,手把手教你使用Conda创建虚拟环境、安装依赖并启动Web GUI界面。核心内容涵盖高质量数据集的准备方法,并重点解析了如何使用kohya_ss工具进行LoRA模型和SDXL模型的微调训练,包括关键参数配置与常见报错解决方案,帮助初学者快速上手AI绘画模型定制。

weixin_29162439的博客 536

flask-redis:如何在flask应用中高效使用redis

【代码】flask-redis:如何在flask应用中高效使用redis。

记忆胶囊 4401

Abaqus滞回问题求解—浆锚连接装配式剪力墙滞回模拟

当下土木工程研究生,多数都在从事装配式混凝土构件安全或装配式混凝土构件连接节点力学性能的研究。研究这类问题,几乎脱离不开对有限元软件的使用,Abaqus求解能力非常强大,但模型处理能力相对较弱。装配式混凝土结构的有限元计算与传统现浇结构相比,其节点处理起来相对复杂,计算结果往往需要凸显出连接节点力学特性,所以对建模精程度的要求较高。所以向大家介绍一款工具—HyperMesh软件(一下简称Hm),它是专业的有限元前处理工具,用于处理装配式混凝土构件或连接节点有限元模型比较合适。这篇文章主要介绍如何利用Hm处理

qq_31918049的博客 2902

国产平替NeuroSky?实测金牛座TGAM脑电模块,从Arduino到Python的完整数据采集指南

本文详细介绍了国产金牛座TGAM脑电模块的完整使用流程,包括硬件连接、数据采集和Python分析。通过Arduino和Python的实战案例,展示了如何从脑电波传感器获取并解析专注度、放松度等数据,适用于专注力训练和脑机接口开发。

weixin_30735745的博客 576

Web 开发 6:Redis 缓存(Flask项目使用Redis并同时部署到Docker详细流程 附项目源码)

在本教程中,我们将学习如何在`PyCharm` 中使用 `Flask` 进行 Web 开发,并利用 Redis 缓存来优化我们的应用程序。

jiet_h的博客 3004

二手分析仪器改造实战:如何用PMT搭建荧光检测电路(附完整电路图)

本文详细介绍了如何利用二手分析仪器中的光电倍增管(PMT)核心部件,进行荧光检测电路的实战改造。内容涵盖从PMT工作原理理解、高压供电电路设计、低噪声前置放大(跨阻放大器)到信号调理的完整流程,并提供了关键电路图与调试排错指南,旨在帮助电子爱好者与工程师低成本构建稳定、高灵敏度的专业检测系统。

weixin_29234239的博客 441

flask项目使用Redis

在flask中使用Redis: 1、配置文件 config.py: REDIS_DB_URL = { 'host': '127.0.0.1', 'port': 6379, 'password': '', 'db': 0 } 2、取得服务器上的Redis连接,新建get_redis.py: impo...

chon机械师的博客 1万+

DSPACE仿真平台的使用

DSPACE仿真平台的使用 文章目录DSPACE仿真平台的使用1.ModelDesk新建项目2.MotionDesk引入项目3.ControlDesk引入项目4.项目整合运行 我们使用DSPACE仿真平台软件来模拟小汽车的自动驾驶。 总共需要用到DSPACE大类下的三个软件:ModelDesk、ControlDesk、MotionDesk。 1.ModelDesk新建项目 在桌面上点击ModelDesk图标,打开DSPACE—ModelDesk 选择 File 标签,侧边栏选择 New,点击 New A

qq_42582489的博客 7528

别再只看成交量了!用通达信这个VOL监测公式,一眼识别主力吸筹与出货信号

本文详细介绍了通达信VOL监测公式的实战应用,通过彩色量柱和换手率分层技术,帮助投资者识别主力吸筹与出货信号。该公式结合动态量能标准化和多周期均线组合,提供可视化主力行为图谱,提升交易决策的准确性。

weixin_28693447的博客 662

flask中使用redis做缓存

有很多种实例方式,这里介绍我最常用的一种CACHE_TYPE:设置缓存的类型# 下面五个参数是所有的类型共有的CACHE_NO_NULL_WARNING = "warning" # null类型时的警告消息CACHE_ARGS = [] # 在缓存类实例化过程中解包和传递的可选列表,用来配置相关后端的额外的参数CACHE_OPTIONS = {} # 可选字典,在缓存类实例化期间传递,也是用来配置相关后端的额外的键值对参数。

python_web全栈 4867

微信小程序推广策略,打开小程序领域流量大门

本文旨在为小程序开发者、运营者和企业主提供一套完整的微信小程序推广策略体系,帮助他们在竞争激烈的小程序生态中获得更多流量和用户。内容涵盖从0到1的冷启动策略,到成熟期的增长技巧。本文将首先介绍小程序的基础推广设置,然后深入探讨各种流量获取渠道,接着分析数据驱动的优化方法,最后展望未来发展趋势。小程序:无需下载安装即可使用的应用,运行在微信生态内:独立访客数:页面浏览量转化率:完成目标行为的用户比例留存率:用户在一定时间后仍活跃的比例自然流量获取:通过优化搜索、完善资料等方式获得基础流量社交裂变。

小程序开发 1031

配置个人Ip代理池

做爬虫最害怕的两件事一个是被封账户一个是被封IP地址,IP地址可以使用代理来解决,网上有许多做IP代理的服务,他们提供大量的IP地址,不过这些地址不一定都是全部可用,因为这些IP地址可能被其他人做爬虫使用,所以随时可能被一些网站封禁,所以对于一些不可用的IP地址,使用之后就会影响程序运行效率,使用在获得IP地址之后,对这些地址做筛选,去除一些不可用的地址,再进行爬虫,效率就大大提升。通过爬取网上一...

weixin_30443075的博客 230

TensorFlow2深度学习实战(十四):目标检测算法 YOLOv4 解析

最易上手的【计算机视觉】小白教程!

不积跬步,无以至千里! 7635

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

抄写一个代理池的维护程序

本文分享了基于崔庆才《Python网络爬虫开发实战》实现的代理池维护程序。该程序通过爬取多个代理网站获取免费代理,存入Redis数据库并进行可用性检测(可用代理设为100分,不可用则减分至删除)。程序包含5个模块:1)主调度模块run.py控制整体流程;2)爬取模块crawler.py从5个代理网站抓取数据;3)检测模块tester.py验证代理可用性;4)数据库模块db.py管理Redis操作;5)API模块api.py提供随机代理和总数查询接口。作者在Win7系统Python3.8环境下成功运行该程序,

gugugaga_xyz的博客 353

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

反爬虫微信文章(总结)

在爬虫时,某些网站会有封ip的现象,所以选择利用代理伪装我们的ip进行爬虫请求,但进行爬虫时可能需要很多ip,这时就要求维护一个代理池(池也就是代理队列),可放进代理,也可取出代理。 本文中选择的崔庆才老师维护的代理池,是用Flask和Redis维护的一个代理池。设计的基本思路 从各大网站获取免费的有用代理 用Redis来维护池的队列存储 维护池,剔除无用的代理,获得有用的代理 Flask是实现...

gg0124的博客 1305

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

使用代理抓取反爬微信文章

声明:此篇文章主要是观看静觅教学视频后做的笔记,原教程地址:https://cuiqingcai.com/ 在抓取网页时,某些网站会有封ip的现象,所以选择利用代理伪装我们的ip进行爬虫请求,但进行爬虫时可能需要很多ip,这时就要求维护一个代理池(池也就是代理队列),可放进代理,也可...

jack_970124的博客 405

Python:Flask + Redis 维护代理池

1.为什么需要维护代理池 我们知道很多网站都是由反爬虫的机制的,于是我们就需要对我们的 ip 进行伪装,也是因为这个原因,网上也有很多的免费代理 IP 可以使用,但是这些 ip 质量参差不齐,于是我们就需要对其进行进一步的过滤,所以我们需要自己维护一个自己的好用的代理池,这就是我们这一节的目的,我们使用的 Redis 就是用来存储我们的代理 ip 信息的,flask 主要为我们提供一个方便的调用...

人生苦短, 还不用Python? 833

Python爬虫第8课 用Flask+Redis维护代理池

用Flask+Redis维护代理池 01.为什么要用代理池? 许多网站有专门的反爬虫措施,可能遇到封IP等问题。为了防止这一情况的发生,我们需要用到代理,来帮助我们完成代理。 网上公开了大量的免费代理,大家利用好资源。 通过定期的维护检测同样可以得到多个可用代理。 02.代理池的要求 1、多站抓取,异步检测 从多个网站上抓取我们所用的代理,利用异步检测的方式,让它访问某一页面,看是否能用。 2、定...

黎明前最后的黑暗的博客 545

【零基础学爬虫】使用Flask+Redis维护代理池

简介 写爬虫有时会面临封ip的问题,使用代理就可以伪装我们的IP。那么我们爬虫请求的时候可能就需要非常多的IP,这里我们维护了一个代理池:池内有非常多的IP,代理IP队列,我们可以向池内放代理ip,也可以从代理池中请求ip。我们需要定期检查和更新,保证代理池中的ip可用。 Redis主要用于维护池,提供池的队列存储,flask主要用于实现代理池接口,使用flask可以从代理池拿出一个代理,这个过程...

我的博客 466

分布式爬虫环境搭建——Redis|Flask代理池维护

代理池介绍 在进行网络爬虫时,由于一些网站的反爬措施会有封ip的现象,可使用代理池来进行代理ip的处理。 代理池的要求: 多站抓取,异步检测。 定时筛选,持续更新。 提供接口,易于提取。 代理池架构: 获取器 过滤器 代理队列 定时检测 参考代理池源码 https://github.com/jhao104/proxy_pool 安装依赖 (将下载的源码解压到自定义目录,使用命令行到该目录下进行安装...

正在加载中...... 505

用Flask+Redis维护代理池

在做爬虫请求的时候我们可能需要很多的ip,这里我们就要维护一个代理池。 代理池即一个代理的队列,我们可以添加代理也可以取出一个代理。我们需要 定期的检查更新来保证其正常使用 Redise 用来维护池,实现池的队列存储 flask 实现代理池的一个接口,从代理池拿出一个代理 用falsk做一个接口,通过web返回代理 为什么要用代理池 许多网站有专门的的反爬虫措施,可能遇到封ip等问题。我...

qq_44859600的博客 175
上一篇: 当我们谈 SQL 优化时在谈些什么?
下一篇: 一个只有99行代码的JS流程框架(二)
Qcloud_KID
博客等级 码龄10年 34粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值