Как использовать резидентные прокси ProxyScrape с Puppeteer для веб-скрейпинга в Node.js
Пошаговое руководство по интеграции резидентных и датацентровых прокси ProxyScrape с Puppeteer в Node.js. Узнайте о настройке HTTP-прокси, аутентификации, ротации и мосте SOCKS5 для продвинутого скрейпинга.
Обзор
ProxyScrape предлагает резидентные, датацентровые и мобильные прокси с поддержкой HTTP и SOCKS5. В сочетании с Puppeteer, headless-браузером Chrome для Node.js, вы можете автоматизировать веб-скрейпинг в масштабе, направляя трафик через пул из более чем 97 млн IP-адресов. В этом руководстве показано, как настроить прокси ProxyScrape в Puppeteer, пройти аутентификацию, ротировать IP-адреса и обрабатывать распространённые ошибки.
Предварительные требования
- Установленный Node.js 16 или более поздней версии. Вы можете скачать его с официального сайта Node.js.
- Аккаунт ProxyScrape с резидентными или датацентровыми прокси. Подойдёт бесплатный пробный период или платный план.
- Базовое знакомство с JavaScript и командной строкой.
Шаг 1: Создание нового проекта Node.js
Откройте терминал и выполните:
mkdir puppeteer-proxyscrape
cd puppeteer-proxyscrape
npm init -y
npm install puppeteer
Это создаёт папку проекта и устанавливает Puppeteer. Обратите внимание, что Puppeteer автоматически загружает совместимую сборку Chromium.
Шаг 2: Получение данных вашего прокси ProxyScrape
Войдите в панель управления ProxyScrape. Перейдите в раздел списка прокси. Вы увидите данные для подключения для каждого типа прокси:
- Резидентные прокси: Ротационные или sticky-сессии с аутентификацией по имени пользователя и паролю.
- Датацентровые прокси: Статические IP-адреса, также с аутентификацией.
Запишите следующие данные для выбранного прокси:
- Хост (например,
gateway.proxyscrape.com— точный хост уточните в панели управления) - Порт (например,
8000для HTTP,1080для SOCKS5 — также подтвердите в панели управления) - Имя пользователя
- Пароль
ProxyScrape обычно предоставляет HTTP- и SOCKS5-эндпоинты. В этом руководстве мы начнём с HTTP.
Шаг 3: Запуск Puppeteer с HTTP-прокси
Создайте файл с именем scrape.js и добавьте следующий код. Замените заполнители на ваши реальные данные прокси.
const puppeteer = require('puppeteer');
(async () => {
const proxyHost = 'gateway.proxyscrape.com';
const proxyPort = '8000';
const proxyUser = 'your_username';
const proxyPass = 'your_password';
const browser = await puppeteer.launch({
headless: true,
args: [
`--proxy-server=http://${proxyHost}:${proxyPort}`
]
});
const page = await browser.newPage();
// Аутентификация с прокси
await page.authenticate({
username: proxyUser,
password: proxyPass
});
// Проверка IP прокси
await page.goto('https://httpbin.org/ip', { waitUntil: 'networkidle0' });
const content = await page.content();
console.log(content);
await browser.close();
})();
Запустите скрипт:
node scrape.js
Вы должны увидеть IP-адрес, используемый прокси, вместо вашего реального IP.
Шаг 4: Ротация прокси с помощью списка
Резидентные прокси ProxyScrape часто поддерживают ротацию сессий с помощью разных имён пользователей или идентификаторов сессий. Распространённый подход — перебор списка эндпоинтов прокси. Вот пример, который переключается между двумя прокси.
const proxies = [
{ host: 'gateway.proxyscrape.com', port: '8000', user: 'user1', pass: 'pass1' },
{ host: 'gateway.proxyscrape.com', port: '8000', user: 'user2', pass: 'pass2' }
];
(async () => {
for (const proxy of proxies) {
const browser = await puppeteer.launch({
headless: true,
args: [`--proxy-server=http://${proxy.host}:${proxy.port}`]
});
const page = await browser.newPage();
await page.authenticate({ username: proxy.user, password: proxy.pass });
await page.goto('https://httpbin.org/ip');
const ip = await page.evaluate(() => document.body.innerText);
console.log(`Proxy IP: ${ip}`);
await browser.close();
}
})();
Для крупномасштабной ротации рассмотрите использование менеджера прокси или библиотеки вроде proxy-chain для централизованной обработки аутентификации и ротации.
Шаг 5: Использование SOCKS5-прокси с Puppeteer (продвинутый уровень)
Chromium, браузер, лежащий в основе Puppeteer, не поддерживает аутентифицированные SOCKS5-прокси нативно. Если вам необходимо использовать SOCKS5-эндпоинты ProxyScrape, вы можете запустить локальный HTTP-прокси, который перенаправляет трафик на SOCKS5. Один из вариантов — использовать npm-пакет proxy-chain.
Установите его:
npm install proxy-chain
Затем создайте локальный прокси-сервер:
const ProxyChain = require('proxy-chain');
(async () => {
const socksUrl = 'socks5://username:[email protected]:1080';
const localHttpProxy = await ProxyChain.anonymizeProxy(socksUrl);
console.log(`Local HTTP proxy: ${localHttpProxy}`);
// Передайте localHttpProxy как --proxy-server в Puppeteer
const browser = await puppeteer.launch({
headless: true,
args: [`--proxy-server=${localHttpProxy}`]
});
const page = await browser.newPage();
await page.goto('https://httpbin.org/ip');
console.log(await page.content());
await browser.close();
})();
Это создаёт мост между аутентифицированным SOCKS5 и неаутентифицированным локальным HTTP-прокси, который может использовать Chromium.
Устранение неполадок
- ERR_PROXY_CONNECTION_FAILED: Проверьте хост и порт. Убедитесь, что ваш IP внесён в белый список, если вы используете аутентификацию по IP. ProxyScrape по умолчанию использует имя пользователя/пароль, но перепроверьте в панели управления.
- Всплывающее окно аутентификации / ошибка 407: Убедитесь, что вы вызываете
page.authenticate()перед навигацией. - Медленные ответы: Попробуйте датацентровый прокси для скорости или резидентный прокси для скрытности. Настройте тайм-ауты в Puppeteer.
- SOCKS5 не работает: Помните, что Chromium не поддерживает аутентификацию SOCKS5 напрямую. Используйте обходной путь с
proxy-chain, описанный выше.
Итог
Вы узнали, как настроить резидентные и датацентровые прокси ProxyScrape с Puppeteer в Node.js. Мы рассмотрели настройку HTTP-прокси, аутентификацию, ротацию и мост SOCKS5 для продвинутых сценариев. Благодаря надёжной инфраструктуре, пулу из более чем 97 млн IP-адресов и стабильному времени безотказной работы ProxyScrape является отличным выбором для проектов веб-скрейпинга.