注册
登录
提问时间:2018/9/13 15:12:34    楼主:未知网友   阅读量:355

在进行爬虫工作的时候,经常会遇到IP被封的问题,烦不胜烦,还好可以使用代理IP来解决这一个麻烦。代理IP哪里来,有人说,网上很多免费的,把它们收集起来就有了,有人说直接找代理IP服务商,比如站大爷,高效稳定,性价比高。不管代理IP从哪里来,我们为了方便使用,需要建立一个代理池,这里使用Redis和Flask维护一个代理池,Redis主要用来提供代理池的队列存储,Flask是用来实现代理池的一个接口,用它可以从代理池中拿出一个代理,即通过web形式把代理返回过来,就可以拿到可用的代理了。

一、代理池的要求

持续更新获取代理IP,定时筛选IP是否有效,提供接口,方便提取使用。

二、代理池的架构

代理IP池架构

架构最核心的部分是“代理队列”,我们要维护的就是这个队列,里面存了很多代理,队列可以用python的数据结构来存,也可以用数据库来存。维护好队列我们需要做两件事情:

1、定时获取代理,添加到代理队列。

获取器从各大网站平台上把代理抓取下来,或者通过购买站大爷代理平台的API接口获取IP,临时存到一个数据结构里面,然后用过滤器对这些代理进行筛选。

筛选的方法也很简单,拿到代理之后,用它请求百度之类的网站,如果可以正常地请求网站,就说明代理可用,否则就将它剔除。过滤完之后将剩余可用的代理放入代理队列。

2、定时检测代理,实时更新代理队列。

因为代理IP具有有效期的特性,可能经过一段时间之后,代理队列里的部分代理已经失效,这就需要定时地从里面拿出一些代理,重新进行检测,保留可用的代理,剔除已经失效的代理。最后我们还需要做一个API,通过接口的形式拿到代理队列里面的一些代理进行使用。

代理池实现的具体代码由于篇幅太大就不贴了,以上只是个最基本的思路,希望对新手朋友们有所帮助,大神们就不要拍砖了。