反爬虫

爬虫多多少少会对服务器有所危害,所以反爬虫是种手段.针对一般的防反爬虫的手段,除了使访问交互更像是人在操作以外,使用代理进行爬虫也是必不可少的一种手段. 扩展阅读:关于反爬虫,看这一篇就够了.

代理ip

代理ip免费的有不少,但是可用性其实并不高,就算是一些主流代理网站卖服务的,也只能保证其提供的代理达到一个一般(20%~30%,私密/独享代理除外)的百分比可用. 而且有的收费代理,也是从互联网中抓取的免费代理,进行校验,然后加以利用罢了.

开放代理中心

类似于提取网上公开的代理ip的开源项目有不少,如Python版的IPProxyPool, Golang版本的ProxyPool等. 因为老本行是java,学习爬虫入坑了webmagic,而其对webmagic又有支持, 所以决定入坑DungProxy. 扩展阅读:proxyhunter,早期比较流行的软件,可以试试能不能用.

基本实现介绍

获取开放的代理ip

通过模板配置,可以任意扩展代理ip抓取.由任务调度进行抓取ip,然后进入可用性测试

入库可用ip

若ip可以使用,则添加到数据库.因为ip的量非常庞大,当量达到一定的阀值的时候,自动采用bloomFilter进行过滤ip,再入库

ip元数据

ip元数据采用taobaoIp进行获取,主要是获取地区信息.

可用性验证

  1. 端口开启校验

    在进行可用性校验前,首先需要检查IP端口是否开启。调研发现大量资源其实端口都不通, 所以专门设计一个任务验证端口是否开启,端口开启验证超时时间为5秒。由于大多数资源端口都没有开启,所以大部分资源的校验时间下降到5秒了。

  2. 可用性校验

    进行可用性校验的需要先进行端口开启校验,系统中端口开启的资源大概3W,所以校验可用性的总资源有3W左右。 可用性校验存在如下问题,很多代理IP其实不是代理网站,想他发送请求最终不是我们预期的数据,比如他返回给我们一个代理IP认证网页。 所以我们不能根据是否能够请求到数据来判定IP是否可用。我们的做法是在公网放置一个API接口, 然后控制代理IP访问我们自己的接口,如果能够拿到符合我们接口的预期数据,那么认为IP可用。

  3. domain可用该校验

    可用性校验通过之后IP还不是真正可用,悲伤的发现代理IP是和域名相关的。 所以同一个IP在不同域名下表现可能不一样。所以我们维护了一个域名IP池,这里面存储各个域名下可用IP.

IP分发

IP分发是根据客户请求分配可用IP。分发逻辑现在还没有完全完善,但是已经实现了最迫切和有校的分发方案。 分发逻辑设计是:先尝试查询domainIP池,再根据其他请求参数做条件匹配,再查询系统可用IP,再随机选择可用填充。 四个步骤如果有一个步骤得到的IP超过请求参数期待数目,则不进行接下来的动作。

设计说明

详见server端设计说明