使用代理ip防止爬虫被封ip(附蘑菇代理开发过程)

在我们使用爬虫的过程中,很容易遇到反爬机制是禁用ip的,可以使用代理ip解决ip被封的问题。但是网上ip代理有很多家,到底选哪家好呢?可以看看这篇文章:https://cuiqingcai.com/5094.html

本文选择蘑菇代理(官网地址http://www.moguproxy.com)进行演示,使用php语言,如果需要大规模抓取可以去试试python。

可以看到官网提供两种方式进行代理,一种是ip代理,一种是隧道代理。ip代理就是把ip和端口号给你,你拿去用,一般有效期是三分钟;隧道代理就是你把网址提交到给代理服务商,代理服务商使用自己的代理ip帮你访问这个网站,然后把信息返回给你。

1、第一种方式

首先代理提供商会提供给你一个ip接口,你可以通过这个接口去获取ip和端口号。但是这些ip的时效是三分钟,所以我建立了一个ip池,每两分钟去更新一次ip池,以确保这些ip每次用到的时候都是有效的(当然官网说ip可用率是>95%)。下面给出代码:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $link);//要访问的url
curl_setopt ($ch, CURLOPT_PROXY, $ip);//使用代理访问 $ip是 ip:port 格式
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/3.0.0.13');//有的网站需要ua,设置一下
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//https网站取消ssl验证
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);//允许30*跳转
curl_setopt($ch, CURLOPT_TIMEOUT,30);//设置超时时间
$response = curl_exec($ch);
if ($response === false) {
    $error_info =  curl_error($ch);
    curl_close($ch);//关闭curl
    return false;
} else {
    curl_close($ch);//关闭curl
    var_dump($response);
}

2、第二种方式

查看蘑菇代理接入文档php代码

替换appkey之后,发现根本不行,一直提示权限不足。后来检查代码才发现 “$appKey = 'Basic '+ 'XXXXXXXX';”的问题,php中拼接字符串应该用“.”,而不是“+”,这里用加号$appKey的值变成0了,我问客服这段代码谁写的,他居然和我说是用户提供的,笑哭了。改了代码之后发现不能实现301重定向,不能抓取https的网址。果断改写成curl的。下面是代码:

$appKey = 'Basic '. 'Q2R1cmNFbEc1VWU5eGVKYTpqcUZmNU';//这里appkey在蘑菇代理控制台找到

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $link);//要访问的url
curl_setopt ($ch, CURLOPT_PROXY, 'transfer.mogumiao.com:9001');//使用代理访问
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.1.0.13');
curl_setopt ($ch, CURLOPT_HTTPHEADER, ["Proxy-Authorization: {$appKey}"]);//设置代理权限
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//https网站取消ssl验证
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);//允许30*跳转
curl_setopt($ch, CURLOPT_TIMEOUT,30);//设置超时时间
$response = curl_exec($ch);
if ($response === false) {
    $error_info =  curl_error($ch);
    curl_close($ch);//关闭curl
    return false;
} else {
    curl_close($ch);//关闭curl
    var_dump($response);
}

用了一周蘑菇代理,实测ip可用率只有81%,与官网说的大于95%还是有差别的。

猜你喜欢

转载自blog.csdn.net/u013091013/article/details/81312559