爬虫怎么解决封IP

在网络爬虫抓取信息的过程中,如果抓取频率高过了网站的设置阀值,将会被禁止访问。通常,网站的反爬虫机制都是依据IP来标识爬虫的。

1. 使用代理IP,在IP被封掉之前或者封掉之后迅速换掉该IP,这种做法主要需要大量稳定的代理IP,代理IP有免费的,但是不稳定。这里的技巧是循环使用,在一个IP没有被封之前,就换掉,过一会再换回来。这样就可以使用相对较少的IP进行大量访问讯代理首页每10分钟更新的免费代理,发现还是挺好的,于是就先把讯代理首页的免费代理先爬下来(10分钟爬一次数据缓存起来,缓存10分钟失效),再用爬下来的代理循环使用去爬其他网站的东西。

2. 使用VPN,VPN跟带来作用类似,只是技术上稍有差别。本质是一样的。

3. 使用有大规模云采集集群的软件工具,比如八爪鱼

4.抓取的时候控制访问频次,抓取后(sleep)休息下再抓

5.对于动态获取IP的路由器,重启后自动换IP

以上三种方式,优先推荐使用代理IP,当然八爪鱼采集器也支持使用代理IP。或者使用云采集平台

1、简单一点的可以在header伪造X-FORWARDED-FOR,并伪造referer,代码如下:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:111.222.333.4', 'CLIENT-IP:111.222.333.4'));
curl_setopt($ch, CURLOPT_REFERER, "http://www.test.com");
2、上面的方法大多数能糊弄过去,但也有抓到了真实IP的。就使用代理IP,麻烦在于你有一个有效的代理ip和端口号,有的还需要用户名密码,可以根据代理建立有效的代理数据库。代码如下:
// 指定代理地址 
$ip = $ips[array_rand($ips, 1)]; // 随机获取一个代理IP
curl_setopt($ch, CURLOPT_PROXY, $ip);
// 如果需要的话,提供用户名和密码  
curl_setopt($ch, CURLOPT_PROXYUSERPWD,'user:pass');
另外还有一种情况,就是用浏览器可以访问,用curl就是不行,发现对方检查了useragent,如果没有就认为是抓取等非法来源,那么我们就自己在header加上useragent,代码如下:
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11");
 

猜你喜欢

转载自hudeyong926.iteye.com/blog/2407583