爬虫爬取代理IP池及代理IP的验证

最近项目内容须要引入代理IP去爬取内容。web

为了项目持续运行,须要不断构造、维护、验证代理IP。服务器

为了绕过服务端对IP 和 频率的限制,为了阻止服务端获取真正的主机IP。tcp

1、服务器如何获取客户端IPide

  1.js获取本地IP后提交测试

  这种方案能够经过抓包查看交互,伪造包达到目的。本机就能够完成。优化

  2.服务端经过 http字段获取真实IP地址网站

  能够经过伪造字段来获取(能够本身伪造,也能够经过高匿代理服务器伪造)spa

  3.服务端经过tcp链接来肯定真实IP地址代理

  这个不可能伪造,否则没法创建TCP链接。code

综合状况,咱们最好经过代理IP服务器(匿名  混淆  高匿 三种代理均可以),交由代理处理字段,让服务端没法得知本身的IP。

2、爬取免费代理(有钱本身买也行)

  1.寻找代理网站而后爬取内容

    这边找的是xici,而后爬取以后对代理进行了筛选。

    xici代理会对ua封IP,须要伪造ua逃避掉。

  2.验证并筛选代理IP

    有些代理服务器并非高匿,虽然声称了高匿,还有广告陷阱。。。

    咱们能够本身搭建一个web服务测试,看代理服务器是否隐藏咱们的IP,也能够经过肯定返回内容长度来肯定是不是广告陷阱。

 1 if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
 2         $ip = getenv('HTTP_CLIENT_IP');
 3     } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
 4         $ip = getenv('HTTP_X_FORWARDED_FOR');
 5     } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
 6         $ip = getenv('REMOTE_ADDR');
 7     } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
 8         $ip = $_SERVER['REMOTE_ADDR'];
 9     }
10     $res =  preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
11     echo $res;
返回实际IP的代码

    结果然的好遗憾。xici高匿代理几万条筛出一条就是不错的结果了。。

3、维护IP池

  开启服务不断爬取筛选,筛选出的IP,须要保存到IP池中。IP池经过消息中间件维护,其余job去访问便可。

  如何保证从IP池获取到的IP是实时有效且匿名的呢。

  能够采起惰性验证的手段,仍是经过访问服务测试。 (这里应该能够优化一下。给IP打上时间戳,必定时间内能够不用再次验证)

相关文章
相关标签/搜索