Python爬虫代理池分享--再也不怕反爬虫

地址:

为什么需要代理池

在爬取网站信息的过程中,有些网站为了防止爬虫,可能会限制每个ip的访问速度或访问次数。对于限制访问速度的情况,我们可以通过time.sleep进行短暂休眠后再次爬取。对于限制ip访问次数的时候我们需要通过代理ip轮换去访问目标网址。所以建立并维护好一个有效的代理ip池也是爬虫的一个准备工作。

如何构建一个代理池

安装

安装Python

至少Python3.5以上

安装Redis

安装好之后将Redis服务开启

配置代理池

cd proxypool

进入proxypool目录,修改settings.py文件

PASSWORD为Redis密码,如果为空,则设置为None

安装依赖

pip3 install -r requirements.txt

打开代理池和API

python3 run.py

获取代理

利用requests获取方法如下

各模块功能

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

设置

项目参考

欢迎关注头条号——造数君

Python经典练手项目——从萌新到大神的成长之路

Python模拟登录汇总,再也不担心反爬虫啦

如何使用Python来写游戏——超级玛丽第一关