$ ls ~yifei/notes/

爬虫 IP 封禁与反封禁

Posted on:

Last modified:

爬虫如果只用固定的同一个或者同一组 IP 的话,很容易被封禁,轻者弹验证码,重者直接无法访问。

这里主要探讨如何构架一个代理 IP 池,从而能够频繁更换代理 IP。

按照代理 IP 的来源,主要有几个方法:

  1. 去免费代理的网站上爬
  2. 利用 ADSL 重拨会更换 IP 的原理,使用 ADSL 机器搭建集群
  3. 利用云提供商的 API,自动更换 IP

反爬虫的核心在于区分开正常用户访问和恶意爬虫用户。来源 IP 是访问很重要的一个特征,我们可以从来源 IP 的角度来做出不少反爬虫策略。

  • 是否是代理 IP
  • 是否是民用 IP
  • IP 地理信息

一般来说,大规模的爬虫我们都会放到服务器上去跑,搭建代理集群也会在服务器上,而正常用户的 IP 地址则来自家用 IP 范围内。这就给反爬虫的一方提供了便利,对于来自数据中心的请求可以直接限制访问甚至直接屏蔽掉,而对于家用的 IP 地址则宽容一些。

下面我们来看几个实例

直接爬取网站

一般正常用户的页面访问量很小,如果发现某个 IP 的访问量特别大,那么肯定是爬虫,直接封禁即可,或者每次都需要输入验证码访问。

IP 被封禁后一般不会被解封,或者需要很长时间,这时候只有两种思路,要么降低频率,更改自己的行为特征,避免被封,要么更换 IP。一般来说,不管怎样更改自己的行为,访问量还是很难降下来的,这时候只能换一个 IP 继续爬。

使用代理网站提供的代理 IP

一些黑客会使用端口扫描器扫描互联网上的开放代理,然后免费或者付费提供给其他用户使用,比如下面这些网站:

免费代理

但是这些网站的代理中能直接使用的可能不到 10%,而且失效时间很短。所以要使用这些代理 IP,需要首先爬取这些网站,然后随取随用。

利用 ADSL 服务器更换 IP

网上有一些小的厂商代理了各地运营商的服务,搭建了一些小的服务器,一般内存只有 512M,而硬盘只有 8G,但是好处是通过 ADSL 上网,因此可以随时更换 IP。比如笔者搭建的这个动态代理:

ADSL

每三十分钟更换一次 IP,而这些服务器也很便宜,在 100-200 每月,所以大可以搭建一个集群,这样基本上一个 IP 被封之前也基本被换掉了。

要封禁这种用户也很简单,可以看出虽然 IP 在更换,但是基本上还是在一个 B 段之内,一个 B 段也就 6w 个用户,直接封了就行了

首先找到一个靠谱的 ADSL 网站就实属不易,这些 adsl 提供商的技术水平普遍不高,往往只能提供 centos 镜像,有 centos 7.1 就算不错的了,其中有一家竟然提供了 ubuntu 14.04,结果还是各种问题,坑了我大概半天的时间。

利用数据中心提供的更换 IP 接口来

有些爬虫会利用阿里云或者 AWS 的弹性 IP 来爬数据,反爬虫的第一步可以把阿里云的 IP 都屏蔽掉,正常用户一般是不会用这些 IP 来访问的。

附录

阿里云的出口 IP 列表:

WeChat Qr Code

© 2016-2022 Yifei Kong. Powered by ynotes

All contents are under the CC-BY-NC-SA license, if not otherwise specified.

Opinions expressed here are solely my own and do not express the views or opinions of my employer.

友情链接: MySQL 教程站