
搞Node.js抓取必须知道的代理坑
最近帮朋友搞个比价网站,用Node.js抓数据时老被ban IP。这事儿真不是技术问题,关键在代理IP的玩法。比如某次连续抓取某电商平台,不到半小时就被封了,后来换了ipipgo的动态住宅代理,立马见效。
const axios = require('axios');
const tunnel = require('tunnel');
const agent = tunnel.httpsOverHttp({
proxy: {
host: 'gw.ipipgo.com',
port: 9021,
proxyAuth: '你的账号:密码'
}
});
axios.get('https://target-site.com', {
httpsAgent: agent,
timeout: 8000
}).then(res => console.log(res.data))
选代理要看哪些硬指标
市面代理分三种类型,给你们列个实在的对比表:
住宅代理 | 机房代理 | 移动代理
— | — | —
真人用户IP | 云服务器IP | 手机基站IP
高匿名性 | 容易被识别 | 中等匿名
适合长期任务 | 适合短频快 | 特定场景用
像ipipgo的住宅代理池子大,我实测过连续三天抓取都没触发反爬。特别要留意存活时间这个参数,有些代理说5分钟有效,实际2分钟就掉线。
实战中代理配置的骚操作
用puppeteer的话记得加启动参数,别傻乎乎裸奔:
const puppeteer = require('puppeteer');
async function crawlWithProxy() {
const browser = await puppeteer.launch({
args: [
'--proxy-server=http://gw.ipipgo.com:9021',
'--disable-gpu'
]
});
//...后续操作
}
遇到过最坑的是SSL证书问题,有些网站会检测代理的证书指纹。这时候用ipipgo的HTTPS代理方案,他们家的证书都是定期更新的,省心。
常见翻车现场自救指南
QA 1:代理突然失效怎么办?
先检查返回状态码,403/429就要换IP。ipipgo的API支持自动切换,建议设置失败重试机制。
QA 2:抓取速度慢如蜗牛?
试试并发请求+代理池轮换。但注意别开太多线程,一般控制在10-20个并发,具体看目标网站承受能力。
QA 3:免费代理能用吗?
血的教训!之前图省事用过免费代理,结果数据里混进了广告代码。现在用ipipgo的独享代理,数据质量稳得一批。
这些细节不注意全白搭
1. 请求头里的X-Forwarded-For要随机生成,别用固定值
2. 每个代理IP建议5-10分钟更换一次
3. 遇到验证码别硬刚,用ipipgo的海外代理换个地区IP试试
4. 日志里记得记录使用的代理IP,方便排查问题
最后说个冷知识:有些网站会检测鼠标轨迹,用headless模式记得加user-agent伪装。我常用的配置方案是ipipgo代理+随机UA库,这套组合拳下来,90%的网站都能搞定。

