
手把手教你用PHP搞网页采集
搞数据采集最怕啥?IP被封啊兄弟们!今天咱就唠唠怎么用PHP的CURL配合代理IP来保平安。先说个真事儿,我有个哥们儿做比价网站,没加代理直接硬刚,结果第二天服务器IP就被目标站拉黑名单了,现在改用ipipgo的代理池再也没翻过车。
基础款采集模板(带代理)
function crawlWithProxy($url) {
$ch = curl_init();
// 重点来了!这里设置代理服务器
curl_setopt($ch, CURLOPT_PROXY, 'proxy.ipipgo.com:9021');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, '用户名:密码');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过https验证
$output = curl_exec($ch);
if(curl_errno($ch)){
throw new Exception('抓取出错: '.curl_error($ch));
}
curl_close($ch);
return $output;
}
// 用法示例
try {
$html = crawlWithProxy('http://目标网站.com');
echo $html;
} catch(Exception $e) {
echo $e->getMessage();
}
注意看代理设置部分,这里用的ipipgo提供的代理地址。他们的格式一般是域名:端口,记得把账号密码换成自己注册的。用他家代理的好处是每次请求自动换IP,目标网站根本摸不清你的套路。
高级配置技巧
想让采集更稳?这几个参数得调好:
// 设置超时时间(单位秒)
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
// 伪装浏览器头
$headers = [
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept-Language: zh-CN,zh;q=0.9'
];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// 自动处理重定向
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
特别提醒:用ipipgo的长效静态代理时,记得在后台设置白名单。要是用动态代理池的话,他们家的API接口可以直接获取最新代理列表,这个后面具体说。
实战常见坑点QA
Q:代理老是连接超时咋整?
A:先检查代理地址和端口对不对,然后试试调大CURLOPT_CONNECTTIMEOUT参数。如果用ipipgo遇到这情况,他们家客服响应速度贼快,后台提交工单5分钟必回。
Q:采集https网站要注意啥?
A:把CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST都设为false,虽然不太安全但能解决问题。或者去ipipgo官网下载CA证书,指定证书路径更稳妥。
Q:怎么自动切换代理IP?
A:ipipgo的动态代理服务自带这个功能,在代码里换成他们的API接口就行。比如:
$proxy = file_get_contents('https://api.ipipgo.com/dynamic?token=你的令牌');
curl_setopt($ch, CURLOPT_PROXY, $proxy);
ipipgo使用小贴士
他们家代理分三种套餐,根据需求选:
| 套餐类型 | 适用场景 | 推荐配置 |
|---|---|---|
| 动态轮转 | 高频采集 | 每请求自动换IP |
| 静态长效 | 需要固定IP | 24小时有效周期 |
| 定制专属 | 企业级需求 | 独享IP池+定制策略 |
新用户注册记得领2G免费流量包,足够测试用了。有个隐藏福利:在代码里用他们家的备用域名proxy2.ipipgo.net,有时候主域名被某些网站屏蔽了可以用这个。
最后说个骚操作:把采集脚本放crontab定时跑的时候,记得在代码里加个随机延迟sleep(mt_rand(1,5)),这样既模拟真人操作,又能避免触发目标网站的风控机制。配合ipipgo的代理,基本上可以做到无感采集,亲测有效!

