手把手教你用NodeJS搭配代理IP薅数据
搞网站采集最怕啥?IP被封绝对排前三!昨天刚跑通的脚本今天就歇菜,这种破事儿我见多了。别慌,今天给大伙儿支个狠招——用代理IP给NodeJS脚本穿马甲。咱就拿天启代理的服务举个栗子,他们家的IP池子够大,200多个城市的节点随便换,实测可用率确实顶。
代理IP怎么接进NodeJS脚本?
先装个axios-proxy-wrapper库,比裸用axios省事儿多了。配置代理的时候注意协议类型,天启代理支持HTTP/HTTPS/SOCKS5全套餐,这里以HTTP为例:
const axios = require('axios');
const proxyWrapper = require('axios-proxy-wrapper');
const api = axios.create();
const proxyList = [
'http://username:password@tianqi-daili-node-1:8000',
'http://username:password@tianqi-daili-node-2:8000'
];
proxyWrapper.wrap(api, {
proxies: proxyList,
rotate: true // 自动切换IP
});
// 抓取时自动走代理池
api.get('目标网址').then(response => {
console.log('数据到手!');
});
关键点在这:记得把天启代理提供的API返回的IP:PORT格式转成标准代理地址,用户名密码别搞错。他们家响应速度确实快,实测延迟基本在8毫秒晃悠,比某些免费代理稳多了。
遇到反爬虫怎么破?
光换IP还不够,得学会伪装。这里分享三个实战技巧:
- Header随机化:User-Agent别总用一个,准备十几个常见浏览器UA轮着用
- 访问节奏控制:别跟打鸡血似的狂刷,随机间隔1-3秒最稳妥
- Cookie策略:重要网站记得做会话保持,用cheerio库解析登录态
举个模拟登录失败的例子:
// 登录失败自动换IP重试
async function loginWithRetry() {
try {
const response = await api.post('/login', {账号信息});
return response.data;
} catch (error) {
console.log('触发验证了,换IP再战!');
api.rotateProxy(); // 调用天启代理切换接口
return loginWithRetry();
}
}
采集效率怎么飞起来?
单线程爬虫早该淘汰了!上puppeteer-cluster搞并发,配合天启代理的SOCKS5协议节点,速度直接起飞:
方案 | 单线程 | 多线程+代理 |
---|---|---|
日处理量 | 约1万条 | 20万+条 |
IP被封概率 | 80%以上 | 低于5% |
注意这坑:别光图快,目标网站的QPS限制得摸清楚,建议先小规模测试再全开。
常见问题QA
Q:代理IP用着用着就超时?
A:检查协议类型是否匹配,天启代理的HTTP和SOCKS5节点要分开配置,自建机房的网络确实稳定
Q:采集到的数据老是残缺?
A:八成是被网站拦截了,试试加上Referer和Accept-Language请求头,再不行上puppeteer模拟浏览器
Q:怎么验证代理IP是否生效?
A:在请求里加个debug接口,返回当前使用的公网IP,天启代理的API能直接查可用IP列表
搞网站采集就像打游击战,代理IP就是你的迷彩服。天启代理这波实测下来确实能打,特别是高可用率这个点,基本不用操心IP失效的问题。最后提醒各位:采集虽好,可别碰法律红线!