在Node.js中,可以使用一些第三方库来管理代理IP。以下是一些建议的库和方法:
axios
和http-proxy-agent
库:首先,安装这两个库:
npm install axios http-proxy-agent
然后,创建一个代理管理器,如下所示:
const axios = require('axios');
const HttpProxyAgent = require('http-proxy-agent');
class ProxyManager {
constructor(proxies) {
this.proxies = proxies;
}
async getProxy() {
const index = Math.floor(Math.random() * this.proxies.length);
const proxy = this.proxies[index];
return new HttpProxyAgent(proxy);
}
async requestWithProxy(url, options = {}) {
const proxy = await this.getProxy();
options.httpAgent = proxy;
options.httpsAgent = proxy;
try {
const response = await axios.request(url, options);
return response;
} catch (error) {
console.error(`Error with proxy ${proxy.host}: ${error.message}`);
return this.requestWithProxy(url, options);
}
}
}
// 使用示例
const proxies = [
'http://proxy1.example.com:8080',
'http://proxy2.example.com:8080',
'http://proxy3.example.com:8080',
];
const proxyManager = new ProxyManager(proxies);
proxyManager.requestWithProxy('https://example.com')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
这个示例中,我们创建了一个ProxyManager
类,它接受一个代理列表。getProxy
方法随机选择一个代理,requestWithProxy
方法使用选定的代理发起请求。如果请求失败,它将尝试使用下一个代理。
puppeteer
库:puppeteer
是一个Node库,提供了一套用于操作Chrome或Chromium的无头浏览器API。它内置了代理支持,可以直接在浏览器中使用代理。
首先,安装puppeteer
库:
npm install puppeteer
然后,创建一个使用代理的爬虫:
const puppeteer = require('puppeteer');
async function crawlWithProxy(url, proxy) {
const browser = await puppeteer.launch({ args: [`--proxy-server=${proxy}`] });
const page = await browser.newPage();
await page.goto(url);
// 在这里编写你的爬虫逻辑,例如提取页面内容、点击按钮等
await browser.close();
}
// 使用示例
const proxy = 'http://proxy1.example.com:8080';
crawlWithProxy('https://example.com', proxy)
.then(() => {
console.log('Crawled successfully');
})
.catch(error => {
console.error(`Error with proxy ${proxy}: ${error.message}`);
});
这个示例中,我们使用puppeteer
启动一个无头浏览器,并通过args
选项设置代理。然后,我们在新页面中访问目标URL,并执行爬虫逻辑。如果请求失败,我们将在控制台输出错误信息。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。