在做网络爬虫时,最常遇到的也是最基本的防爬虫手段之一就是封IP。目标网站会因为某个IP过高的访问评率,而将其封掉,不再接受其请求。所以我们往往会使用大量的代理,但是代理从哪来呢?代理是否可用呢?这就需要我们构建一个代理池。

代理种类的介绍

代理根据代理服务端配置的不同,可以分为四类:

  • 透明代理:
    透明代理虽然可以直接“隐藏”我们的IP地址,但是可以知道是哪个IP使用这个代理进行转发的。
  • 匿名代理:
    匿名代理在透明代理的基础上,隐藏了我们的IP,所以人家知道我们使用了代理,但是不知道我们是谁。
  • 混淆代理:
    混淆代理伪装了使用者的IP,人家还是知道我们使用了代理,但是会得到一个假的IP。
  • 高匿代理:
    使用高匿代理,人家将无法发现我们使用了代理。

可以看出,爬虫时使用透明代理,基本上是没有什么用的。很多服务器会拒绝使用了代理的请求,所以匿名代理和混淆代理很多时候也是无法派上用场的,所以我们最好的选择就是高匿代理。

代理池的架构设计

问题思考

我们首先思考下面几个问题:

  • 代理如何获取?
    有很多免费的代理获取网站可以爬取和采集代理,当然还有很多可通过API的方式直接获取代理。也可以购买一些收费的代理,质量相对较高。

  • 代理的质量如何,是否可用?
    免费代理,包括很多收费代理,都不一定是可用的,有些可用代理的速度也是令人堪忧的,所以我们需要对于我们采集的代理进行定时检测,查看代理是否可用。

  • 代理如何存储?
    代理的存储,我们使用非关系型数据库(NoSQL)即可,本文使用Redis。

  • 代理如何使用?
    既然是个代理池,应该是独立于爬虫的,可通用多个爬虫或者其他业务,那最好的选择自然是做成一个web服务,通过web api获取即可。

模块设计

由上面的问题思考,我们将代理池分为五个模块:

  • Getter:
    获取模块,用于从代理源网站获取最新代理的模块,然后存入数据库,可进行代理网站扩展。

  • DB:
    数据库模块,用来连接数据库,存储代理,对代理进行基本的增删改查,随机获取等等。

  • Tester:
    测试模块,定时对数据库中的代理进行可用性测试和评分。

  • WebAPI:
    api模块,可通过api获取可用代理等。

  • Schedule:
    调度器模块,调度器模块是用来调用和分配各个模块进行工作的。

接下来就进入教程实战吧!

代理池开发

创建一个名为MyProxyPool的工程,安装我们需要的依赖库:Flask, redis, requests, pyquery, aiohttp
接下来:

完整代码戳我

微信 OR 支付宝 扫描二维码
给复仇者码农 打个赏吧  
微信打赏   支付宝打赏  
金额随意 快来“打”我呀~

1 对 “Python爬虫之构建代理池”的想法;

发表评论