简介
写爬虫有时会面临封ip的问题,使用代理就可以伪装我们的IP。那么我们爬虫请求的时候可能就需要非常多的IP,这里我们维护了一个代理池:池内有非常多的IP,代理IP队列,我们可以向池内放代理ip,也可以从代理池中请求ip。我们需要定期检查和更新,保证代理池中的ip可用。
Redis主要用于维护池,提供池的队列存储,flask主要用于实现代理池接口,使用flask可以从代理池拿出一个代理,这个过程就是使用flask做一个接口,通过web的形式把代理返回,这样我们就可以拿到代理了。
为什么要使用代理
- 许多⽹网站有专⻔门的反爬⾍虫措施,可能遇到封IP等问题。需要代理伪装自己的ip请求网站
- 互联⽹网上公开了了⼤量免费代理,利⽤好资源。
- 通过定时的检测维护同样可以得到多个可⽤代理。
- 很多卖代理的商家其实就是维护了一个代理池,自己维护代理池就不用付费购买了
代理池的要求
- 多站抓取,异步检测:多站抓取:指的是我们需要从各大免费的ip代理网站,把他们公开的一些免费代理抓取下来;一步检测指的是:把这些代理通过异步请求的方式,利用这些代理请求网站:如果能正常请求就证明代理可用,如果不能正常请求就证明代理不行,这时就可以把这个代理剔除掉,异步指的是:我们不需要一直等待代理请求网站,到得到response之后在执行相应的操作就可以了,异步可以提高检测效率。
- 定时筛选,持续更新:我们维护一个代理池,我们需要做的是需要定时从里面拿出一部分来检测,剔除掉不可用的代理。这可以保证代理是可用的
- 提供接口,易于提取:代理实际上是维护在一个队列中,队列可以使用数据库存储,也可以使用一些数据结构来存储,但是如果要获取代理的话,要提供一个简单的接口,最简单的是web形式的接口:本文主要演示一个利用python flask包来提供接口:之后使用python请求网址,从网页中拿到代理的信息了
代理池的架构
- 获取器:从各大网站平台抓取代理:ip和端口
- 过滤器:剔除掉不可用的代理
- 将可用代理放到代理队列
- 定时检测器:剔除不可用的代理
- API:通过接口形式拿到代理对象,方便使用
代理池实现
代码比较长就不贴在博客中了:
扫描下方二维码,公众号菜鸟名企梦
后台发送关键词“代理池”即可获取本文的完整源码和详细程序注释
公众号菜鸟名企梦
专注:互联网求职面经、java、python、爬虫、大数据等技术、海量资料分享:
公众号菜鸟名企梦
后台发送“csdn文库下载”即可免费领取【csdn】和【百度文库】下载服务;
公众号菜鸟名企梦
后台发送“资料”:即可领取5T精品学习资料、java面试考点和java面经总结,以及几十个java、大数据项目,资料很全,你想找的几乎都有
网友评论