一、为啥爬虫总被封?试试这个法子
搞数据采集的兄弟都懂,用PHP写爬虫最头疼的就是IP被封。前几天帮朋友做个比价工具,刚跑半小时就收到403 forbidden,气得他直拍键盘。这时候就得祭出大杀器——代理IP。这玩意儿就像给爬虫戴了无数个面具,每次请求都换张脸,网站根本分不清是人是机器。
二、手把手教你装CURL扩展
先确认服务器装好了CURL扩展(没装的自己面壁去)。打开php.ini文件,找到这行:
;extension=curl
把前面分号删掉,重启Apache/Nginx。写个测试脚本:
if(function_exists('curl_version')){
echo 'CURL已启用';
} else {
echo '赶紧去装扩展!';
}
三、代理IP接入实战代码
重点来了!用ipipgo的代理服务,他们家提供动态住宅代理,实测过稳定性不错。看这段核心代码:
$proxy = 'gateway.ipipgo.com:9021'; //代理服务器地址
$auth = '用户名:密码'; //在ipipgo后台获取
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, '目标网址');
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $auth);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$result = curl_exec($ch);
if(curl_errno($ch)){
echo '出错啦:'.curl_error($ch);
}
curl_close($ch);
四、避开这些坑能省两小时
新手常犯的三大错误:
坑点 | 解决办法 |
---|---|
代理IP没生效 | 先用curl_getinfo检查HTTP_CODE |
频繁超时 | 把超时设到30秒以上 |
验证失败 | 检查ipipgo后台的账户状态 |
五、采集效率翻倍秘籍
单线程爬虫太慢?上多线程!用PHP的curl_multi系列函数,配合ipipgo的多通道代理,速度直接起飞。记得设置:
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); //禁用连接复用
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); //强制新连接
六、常见问题QA
Q:代理IP突然失效咋办?
A:在ipipgo后台开启自动更换IP功能,设置每5分钟轮换一次
Q:要采集HTTPS网站怎么办?
A:在curl配置里加上:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Q:代理速度慢怎么优化?
A:优先选用ipipgo的国内BGP线路,延迟能控制在200ms以内
七、说点掏心窝的话
搞了这么多年爬虫,代理IP这玩意儿真的是刚需。自己维护IP池太费劲,不如直接用现成的服务。像ipipgo这种支持按量付费的,对小项目特别友好。最后提醒各位:做采集要遵守网站robots协议,别把人服务器搞崩了!