在我们使用爬虫的过程中,很容易遇到反爬机制是禁用 ip 的,可以使用代理 ip 解决 ip 被封的问题。但是网上 ip 代理有很多家,到底选哪家好呢?
本文选择亿牛云代理 ( 官网地址 www.16yun.cn) 进行演示,使用 php 语言,如果需要大规模抓取可以去试试 python 。
在官网我们可以看到有提供两种方式进行代理,一种是 api 模式,一种是隧道模式。 Api 模式就是我们爬虫最常用到的,就是提供 url 连接给你,你的程序自动的获取代理信息。这个模式适合自己需要管理 ip 池控制 ip 的使用, ip 的有效时间是 2 到 10 分钟;隧道模式就提供给你一个固定的服务器 ip 地址信息,包括 ip :端口:用户名:密码只需要将代理信息配置到程序里面就可以使用,他们后台会自动切换 ip ,这个模式很方便,简单。
1 、第一种方式
第一种方式
首先代理提供商会提供给你一个 api 接口,你可以通过这个接口去获取 ip和端口号。但是这些ip的时效是 2到10 分钟,所以我建立了一个 ip池,每两分钟去更新一次ip池,以确保这些ip每次用到的时候都是有效的 。
第二种方式
可以直接查看亿牛云代理接入文档 php代码
<?php
// 要访问的目标页面
$url = "http://httpbin.org/ip" ;
$urls = "https://httpbin.org/ip" ;
// 代理服务器
define ( "PROXY_SERVER" , "tcp://t.16yun.cn:31111" );
// 隧道身份信息
define ( "PROXY_USER" , "16YUN123" );
define ( "PROXY_PASS" , "123456" );
$proxyAuth = base64_encode ( PROXY_USER . ":" . PROXY_PASS );
// 设置 Proxy tunnel
$tunnel = rand ( 1 , 10000 );
$headers = implode ( " \r\n " , [
"Proxy-Authorization: Basic { $proxyAuth } " ,
"Proxy-Tunnel: ${ tunnel } " ,
]);
$sniServer = parse_url ( $urls , PHP_URL_HOST );
$options = [
"http" => [
"proxy" => PROXY_SERVER ,
"header" => $headers ,
"method" => "GET" ,
'request_fulluri' => true ,
],
'ssl' => array (
'SNI_enabled' => true , // Disable SNI for https over http proxies
'SNI_server_name' => $sniServer
)
];
print ( $url );
$context = stream_context_create ( $options );
$result = file_get_contents ( $url , false , $context );
var_dump ( $result );
// 访问 HTTPS 页面
print ( $urls );
$context = stream_context_create ( $options );
$result = file_get_contents ( $urls , false , $context );
var_dump ( $result ); ?>
经过一周的测试,代理的有效率在 90% 以上,总体来说效果还是很好的。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。