
手把手教你用PHP抓数据不封号
搞爬虫的朋友都懂,网站反爬机制越来越严。上周我同事用PHP写了个采集脚本,结果刚跑半小时IP就被封了。这时候就需要代理IP轮换这个神器了,今天咱们就聊聊怎么用ipipgo的代理服务给PHP脚本续命。
// 基础版代理设置
$proxy = '123.123.123.123:8888';
$context = stream_context_create([
'http' => [
'proxy' => "tcp://$proxy",
'request_fulluri' => true
]
]);
$content = file_get_contents('目标网址', false, $context);
给PHP爬虫装上智能换IP功能
单纯设置固定代理还不够,得搞个动态IP池。这里推荐用ipipgo的API获取海量代理,他们的IP存活率能到95%以上。具体操作分三步:
- 注册ipipgo账号领取500个测试IP
- 调用他们的API获取最新代理列表
- 每次请求随机选个IP用
// 获取ipipgo代理池示例
$api_url = "https://api.ipipgo.com/get?format=json&key=你的密钥";
$ip_list = json_decode(file_get_contents($api_url), true);
// 随机选个代理
$rand_proxy = $ip_list['data'][array_rand($ip_list['data'])];
遇到验证码怎么办?试试这招
就算用了代理,有些网站还是会出验证码。这时候要控制访问频率,建议:
| 网站类型 | 建议间隔 | 并发数 |
|---|---|---|
| 普通资讯站 | 3-5秒 | 5个 |
| 电商平台 | 10-15秒 | 2个 |
| 社交媒体 | 20-30秒 | 1个 |
配合ipipgo的按量计费套餐,可以设置自动切换IP策略。实测下来,他们的响应速度比普通代理快40%左右,处理验证码的成功率能提高不少。
常见问题急救包
Q:代理IP突然失效咋整?
A:建议用ipipgo的智能检测功能,他们的API返回的IP都带存活时间标记,用之前先ping一下
Q:抓取速度太慢怎么破?
A:检查代理服务器位置,选目标网站所在地区的节点。ipipgo有30多个国家节点可选,记得选地理距离近的
Q:HTTPS网站代理失败?
A:在stream_context里加ssl配置,或者改用Curl方式:
$ch = curl_init();
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
升级版方案:自动维护IP池
对于长期运行的爬虫,建议做个IP健康检查机制。用ipipgo的API配合定时任务,每小时更新一次IP池。这里分享个自用脚本逻辑:
- 每60分钟拉取新IP列表
- 剔除响应超时的代理
- 记录每个IP的成功率
- 优先使用高成功率IP
这样搞下来,我们有个项目连续跑了7天没被封,ipipgo的稳定性确实顶。现在他们新用户送500个IP试用,搞爬虫的可以去试试。

