
手把手教你用NodeJS+代理IP搞网站抓取
最近不少兄弟问我,用NodeJS抓网站老被封IP怎么办?今天咱们就唠这个事儿。先说重点啊,代理IP绝对是防封的续命神器,特别是像ipipgo这种专业服务商,他们家IP池子大得跟米缸似的,用起来那叫一个丝滑。
为啥非得用代理IP?
举个栗子,你去超市抢特价鸡蛋,要是一天去八百趟,保安不拦你拦谁?网站服务器也是这个理儿。用ipipgo的代理IP就像换不同的马甲去采购,每次换个IP地址,服务器就认不出是你了。
const axios = require('axios');
const cheerio = require('cheerio');
// 这里换成你自己的ipipgo代理地址
const proxyConfig = {
host: 'gateway.ipipgo.com',
port: 9021,
auth: {
username: '你的账号',
password: '你的密码'
}
};
async function grabData(url) {
try {
const response = await axios.get(url, {
proxy: proxyConfig
});
const $ = cheerio.load(response.data);
// 抓取逻辑写这里...
} catch (error) {
console.log('抓取出错:', error.message);
}
}
Cheerio解析三板斧
拿到网页后得拆解数据吧?Cheerio这玩意儿就跟剪刀浆糊似的,贼好用。重点记住三个套路:
// 1. 找固定标识
const price = $('div.price-box span').text();
// 2. 按属性定位
const stock = $('[data-type="inventory"]').attr('data-count');
// 3. 遍历列表
$('ul.product-list li').each((index, element) => {
const title = $(element).find('h3').text();
});
ipipgo实战技巧
他们家代理有个绝活——自动更换IP。在代码里加个随机间隔,成功率直接翻倍:
function randomDelay() {
return Math.floor(Math.random() 3000) + 1000;
}
async function safeGrab(url) {
await new Promise(resolve => setTimeout(resolve, randomDelay()));
return grabData(url);
}
常见翻车现场QA
Q:为啥我用了代理还是被封?
A:八成是IP质量不行,免费代理就跟路边摊似的,指不定啥时候就窜稀。建议用ipipgo的独享IP,专人专用不串号。
Q:数据抓不全咋整?
A:先检查是不是触发了反爬机制,试试加上这些headers:
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0) 正经浏览器',
'Accept-Language': 'zh-CN,zh;q=0.9'
}
避坑指南
| 坑点 | 解决办法 |
|---|---|
| 请求频率过高 | 加随机延迟,控制在3-5秒/次 |
| HTML结构变化 | 定期检查选择器,用try-catch兜底 |
| 验证码拦截 | 配合ipipgo的住宅代理IP使用 |
最后说句掏心窝的,抓数据这事儿就跟钓鱼似的,耐心+好工具缺一不可。ipipgo最近在做活动,新用户送10G流量,够你折腾一阵子了。遇到具体问题可以直接call他们技术客服,响应速度比外卖小哥还快。

