手把手教你用Node-fetch+代理IP抓数据
搞数据采集的老铁们应该都懂,直接用自己服务器IP硬刚目标网站,分分钟就被封号拉黑。昨天有个做电商的朋友跟我吐槽,他们爬竞品价格时,刚抓200条数据IP就被封了。这时候就得祭出咱们的代理IP大法,特别是像ipipgo这种专业服务商提供的优质IP,绝对能让你采集效率翻倍。
为啥非得用代理IP?
举个栗子🌰:你去超市买特价商品,每次都穿同一件荧光绿外套,保安不盯你盯谁?同理,用固定IP高频访问网站,人家防火墙也不是吃素的。ipipgo的代理IP池子够大,每次请求都自动切换马甲,完美解决这个问题。
// 原始裸奔版请求(高危操作)
const fetch = require('node-fetch');
fetch('https://目标网站.com/api');
实战改造:给请求穿上代理马甲
先说要用到的两个宝贝:node-fetch负责发请求,http-proxy-agent负责代理配置。这里以ipipgo的HTTP代理为例(他们家新用户送1G流量,够测试用):
const fetch = require('node-fetch');
const { HttpsProxyAgent } = require('https-proxy-agent');
// 从ipipgo后台获取的代理信息
const proxyConfig = {
host: 'gateway.ipipgo.com',
port: 9021,
auth: '账号:密码' // 记得换成自己的
};
const agent = new HttpsProxyAgent(
`http://${proxyConfig.auth}@${proxyConfig.host}:${proxyConfig.port}`
);
// 带代理的安全请求
async function safeFetch(url) {
try {
const response = await fetch(url, { agent });
console.log(await response.text());
} catch (error) {
console.log('请求扑街了:', error.message);
}
}
// 实战调用
safeFetch('https://目标网站.com/api?page=1');
避坑指南:这些细节不注意就白搞
1. 超时设置:建议在fetch配置里加个timeout,超过5秒没响应就放弃
2. IP轮换:ipipgo支持按请求切换IP,记得在代理地址后面加&change=1参数
3. 并发控制:别一股脑开100个线程,建议用p-limit库控制并发数
问题现象 | 排查方向 |
---|---|
返回407错误 | 检查账号密码/白名单IP是否配置正确 |
连接超时 | 尝试切换不同地域的代理节点 |
常见问题QA
Q:用免费代理不行吗?
A:免费代理10个里有8个不能用,ipipgo的独享IP池可用率98%,实测比自建代理省心得多
Q:每次都要手动改代理配置?
A:可以用ipipgo的API动态获取代理,建议配合redis做IP池的自动更新
Q:遇到网站反爬怎么破?
A:ipipgo的高匿IP+随机UA+请求延时组合拳,亲测能绕过大多数基础防护
说点掏心窝的话
之前我也试过自己维护代理服务器,结果光处理IP被封、网络抖动这些破事就掉了一半头发。后来转用ipipgo的现成服务,开发效率直接起飞。特别是他们的智能路由功能,能自动匹配最快节点,对需要大量采集数据的项目是真香。
最后提醒下:虽然代理IP能降低封禁风险,但采集频率还是要做控制。建议根据目标网站的robots.txt合理设置间隔时间,咱们要做有道德的爬虫工程师不是?