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

用Flask+Redis维护代理池

01.为什么要用代理池?

许多网站有专门的反爬虫措施,可能遇到封IP等问题。为了防止这一情况的发生,我们需要用到代理,来帮助我们完成代理。
网上公开了大量的免费代理,大家利用好资源。
通过定期的维护检测同样可以得到多个可用代理。

02.代理池的要求

1、多站抓取,异步检测
从多个网站上抓取我们所用的代理,利用异步检测的方式,让它访问某一页面,看是否能用。
2、定时筛选,持续更新
我们要维护这一部分代理,需要进行定时的筛选,剔除不可以用的代理,保证代理有效。
3、提供接口,易于提取
最好是提供一个web借口

03.代理池架构

在这里插入图片描述

代理队列——核心部分,存储代理
获取器——从网站平台将代理抓取下来,临时存储到一个数据结构中
过滤器——对代理进行筛选,筛选可用的代理
定时检测器——定时检查代理是否能够正常使用
API——通过一个接口的形式,从代理队列中取出需要的代理

04.代理池实现

代码参考:崔庆才代理池
ProxyPool
此代理池在获取IP的时候使用了pop方法一次性使用,如果是想多次可用可以移步优化后的代理池:https://github.com/Python3WebSpider/ProxyPool,推荐使用。

4.1 安装

1、安装Python
至少Python3.5以上
2、安装Redis
安装好之后将Redis服务开启
3、配置代理池
cd proxypool
进入proxypool目录,修改settings.py文件
PASSWORD为Redis密码,如果为空,则设置为None
4、安装依赖
pip3 install -r requirements.txt
(如果程序报错,一般情况下是你的依赖包没有安装完全,看一下是哪个包没有安装上,用pip3 安装一下就OK!)
5、打开代理池和API
python3 run.py

4.2获取代理

利用requests获取方法如下

import requests

PROXY_POOL_URL = 'http://localhost:5000/get'

def get_proxy():
    try:
        response = requests.get(PROXY_POOL_URL)
        if response.status_code == 200:
            return response.text
    except ConnectionError:
        return None
4.3 各模块功能●○

getter.py
爬虫模块
○ class proxypool.getter.FreeProxyGetter
爬虫类,用于抓取代理源网站的代理,用户可复写和补充抓取规则。
schedule.py
调度器模块
○ class proxypool.schedule.ValidityTester
异步检测类,可以对给定的代理的可用性进行异步检测。
○ class proxypool.schedule.PoolAdder
代理添加器,用来触发爬虫模块,对代理池内的代理进行补充,代理池代理数达到阈值时停止工作。
○ class proxypool.schedule.Schedule
代理池启动类,运行RUN函数时,会创建两个进程,负责对代理池内容的增加和更新。
●db.py
Redis数据库连接模块
○ class proxypool.db.RedisClient
数据库操作类,维持与Redis的连接和对数据库的增删查该,
●error.py
异常模块
○ class proxypool.error.ResourceDepletionError
资源枯竭异常,如果从所有抓取网站都抓不到可用的代理资源,则抛出此异常。
○ class proxypool.error.PoolEmptyError
代理池空异常,如果代理池长时间为空,则抛出此异常。
api.py
API模块,启动一个Web服务器,使用Flask实现,对外提供代理的获取功能。
utils.py
工具箱
setting.py
设置
●项目参考:https://github.com/WiseDoge/ProxyPool

详细的用法讲解可以查看视频:https://www.bilibili.com/video/av19057145/?p=17
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值