在我们使用爬虫的过程中,很容易遇到反爬机制是禁用
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%
以上,总体来说效果还是很好的。