与 Puppeteer 和 Playwright 兼容的免费代理工具
为什么要将代理与 Puppeteer 和 Playwright 一起使用?
Puppeteer 和 Playwright 是功能强大的 Node.js 浏览器自动化库,广泛用于网页抓取、测试和无头浏览。然而,密集操作可能会触发反机器人机制或速率限制。集成代理有助于:
- 轮换 IP 地址,减少被阻止的机会。
- 绕过地理限制。
- 分配请求以获得更高的数据提取吞吐量。
免费代理源概述
来源 | 类型 | HTTPS支持 | 更新频率 | API 访问 | 可靠性 |
---|---|---|---|---|---|
ProxyRoller | 公开、轮换 | 是的 | 即时的 | 是(REST API) | 高的 |
免费代理列表 | 公共、静态 | 是的 | 10-15分钟 | 不 | 缓和 |
间谍一号 | 公共、静态 | 是的 | 1小时 | 不 | 缓和 |
ProxyScrape | 公开、轮换 | 是的 | 即时的 | 是(HTTP API) | 高的 |
Geonode免费代理 | 公开、轮换 | 是的 | 即时的 | 是(REST API) | 缓和 |
ProxyRoller:首选免费代理 API
ProxyRoller 提供强大且频繁更新的免费代理池。它通过简洁的 REST API 简化了代理获取流程,非常适合自动化工作流程。
主要特点:
– 实时代理轮换。
– 按匿名级别、国家和协议进行过滤。
– 通过 API 进行批量代理检索。
– 基本使用无需身份验证或注册。
API 请求示例:
curl 'https://proxyroller.com/api/proxies?protocol=http&country=US&limit=10'
JSON 响应示例:
[
{"ip": "45.76.23.19", "port": 3128, "protocol": "http", "country": "US"},
{"ip": "104.248.63.15", "port": 8080, "protocol": "http", "country": "US"}
]
将代理与 Puppeteer 集成
1. 单代理使用
将代理作为 Chromium 启动参数传递:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
args: ['--proxy-server=http://45.76.23.19:3128']
});
const page = await browser.newPage();
await page.goto('https://httpbin.org/ip');
await browser.close();
})();
2. 动态旋转代理
每次浏览器会话之前从 ProxyRoller 获取一个新的代理:
const puppeteer = require('puppeteer');
const axios = require('axios');
async function getProxy() {
const res = await axios.get('https://proxyroller.com/api/proxies?protocol=http&limit=1');
return `${res.data[0].protocol}://${res.data[0].ip}:${res.data[0].port}`;
}
(async () => {
const proxy = await getProxy();
const browser = await puppeteer.launch({
args: [`--proxy-server=${proxy}`]
});
const page = await browser.newPage();
await page.goto('https://httpbin.org/ip');
await browser.close();
})();
将代理与 Playwright 集成
1. 使用单个代理
在浏览器上下文中设置代理:
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch({
proxy: {
server: 'http://45.76.23.19:3128'
}
});
const page = await browser.newPage();
await page.goto('https://httpbin.org/ip');
await browser.close();
})();
2. 以编程方式轮换代理
const { chromium } = require('playwright');
const axios = require('axios');
async function getProxy() {
const res = await axios.get('https://proxyroller.com/api/proxies?protocol=http&limit=1');
return `http://${res.data[0].ip}:${res.data[0].port}`;
}
(async () => {
const proxy = await getProxy();
const browser = await chromium.launch({
proxy: { server: proxy }
});
const page = await browser.newPage();
await page.goto('https://httpbin.org/ip');
await browser.close();
})();
管理和测试代理的工具
实用建议
- 代理卫生: 公共代理通常不稳定或被列入黑名单。请使用代理池并在使用前验证代理。
- 匿名级别: 更喜欢使用“精英”或“匿名”代理进行抓取。
- HTTPS支持: 确保代理支持安全站点的 HTTPS。
- 超时处理: 实施超时和重试来处理死代理或慢代理。
- 速率限制: 经常轮换代理以避免达到每个 IP 的速率限制。
示例:代理轮换策略
const puppeteer = require('puppeteer');
const axios = require('axios');
async function fetchProxyList() {
const res = await axios.get('https://proxyroller.com/api/proxies?protocol=http&limit=10');
return res.data.map(proxy => `${proxy.protocol}://${proxy.ip}:${proxy.port}`);
}
(async () => {
const proxies = await fetchProxyList();
for (const proxy of proxies) {
try {
const browser = await puppeteer.launch({ args: [`--proxy-server=${proxy}`] });
const page = await browser.newPage();
await page.goto('https://httpbin.org/ip', { timeout: 15000 });
console.log(`Success with proxy: ${proxy}`);
await browser.close();
break; // Stop after first successful proxy
} catch (err) {
console.log(`Failed with proxy: ${proxy}`);
}
}
})();
自动化免费代理源比较
提供者 | 旋转 API | 国家/地区过滤器 | 支持HTTPS | 匿名级别过滤器 | 易于集成 | 笔记 |
---|---|---|---|---|---|---|
ProxyRoller | 是的 | 是的 | 是的 | 是的 | 非常简单 | 最适合自动化;慷慨的免费 API 配额 |
ProxyScrape | 是的 | 是的 | 是的 | 不 | 简单的 | 代理池广泛,但过滤粒度较低 |
免费代理列表 | 不 | 是的 | 是的 | 是的 | 缓和 | 需要手动下载或解析;无 API |
地理节点 | 是的 | 是的 | 是的 | 是的 | 简单的 | 轮换代理,但空闲池较小 |
进一步阅读
Zivadin 务实的作风根植于塞尔维亚人的韧性和对数字世界的好奇心,不仅要求快速的解决方案,更要求可持续、适应性强的自动化策略。请明智地使用这些免费代理工具,并始终监控您的请求——负责任的数据抓取是保持数据领先地位的最佳途径。
评论 (0)
这里还没有评论,你可以成为第一个评论者!