Skip to content
Advanced / 3 min read

Продвинутый веб-скрапинг с резидентными прокси Dataimpulse и Puppeteer в Windows

Узнайте, как интегрировать ротационные резидентные прокси Dataimpulse с Puppeteer в Windows для высокообъемного, продвинутого веб-скрапинга. Это руководство охватывает настройку, аутентификацию, ротацию прокси и обработку параллелизма.

Windows HTTP(S) Веб-скрейпинг

Обзор

Puppeteer — это мощная библиотека Node.js для управления безголовым Chrome. В сочетании с ротационными резидентными прокси Dataimpulse вы можете парсить крупные веб-сайты, не опасаясь блокировки. В этом руководстве показано, как настроить Puppeteer в Windows для использования резидентных прокси Dataimpulse, обрабатывать аутентификацию и реализовать эффективную ротацию для высокообъемного веб-скрапинга.

Предварительные требования

  • Windows 10 или более поздняя версия.
  • Установленный Node.js 14+ (скачать с официального сайта Node.js).
  • Аккаунт Dataimpulse с учетными данными резидентного прокси (имя пользователя, пароль, конечная точка).
  • Базовые знания JavaScript и async/await.

Шаг 1: Установка Node.js и Puppeteer

Если вы еще этого не сделали, установите Node.js с официального сайта. Затем создайте новую папку проекта и установите Puppeteer.

mkdir dataimpulse-puppeteer
cd dataimpulse-puppeteer
npm init -y
npm install puppeteer

Шаг 2: Получение учетных данных прокси Dataimpulse

Войдите в свою панель управления Dataimpulse и перейдите в раздел резидентных прокси. Вы найдете:

  • Конечная точка: хост и порт, например, proxy.dataimpulse.com:12321 (точные данные смотрите в своей панели управления).
  • Имя пользователя: ваше имя пользователя Dataimpulse.
  • Пароль: ваш пароль Dataimpulse.

Dataimpulse использует ротационный шлюз, поэтому каждый запрос через эту конечную точку будет использовать другой IP из пула (если вы не используете порты с липкими сессиями). В этом руководстве мы будем использовать ротационную конечную точку.

Шаг 3: Настройка Puppeteer с аутентификацией прокси

Puppeteer может использовать прокси, передавая аргумент --proxy-server при запуске браузера. Аутентификация обрабатывается через page.authenticate(). Создайте файл scrape.js:

const puppeteer = require('puppeteer');

const PROXY_HOST = 'YOUR_ENDPOINT_HOST'; // Replace with your Dataimpulse proxy host
const PROXY_PORT = 'YOUR_ENDPOINT_PORT'; // Replace with your Dataimpulse proxy port
const PROXY_USER = 'your_username';
const PROXY_PASS = 'your_password';

(async () => {
  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', { waitUntil: 'networkidle0' });
  const content = await page.content();
  console.log(content); // Should show the proxy IP

  await browser.close();
})();

Запустите скрипт с помощью node scrape.js. Вы должны увидеть IP-адрес, который не является вашим, что подтвердит работу прокси.

Шаг 4: Реализация логики ротационных прокси

Поскольку конечная точка Dataimpulse автоматически ротирует IP-адреса, вы можете выполнять несколько запросов через один и тот же экземпляр браузера, и каждый будет использовать другой IP. Однако для лучшего контроля и во избежание обнаружения вы можете закрывать и заново открывать браузер или использовать контексты инкогнито. Вот пример, который парсит несколько страниц с ротацией:

const puppeteer = require('puppeteer');

const PROXY_HOST = 'YOUR_ENDPOINT_HOST';
const PROXY_PORT = 'YOUR_ENDPOINT_PORT';
const PROXY_USER = 'your_username';
const PROXY_PASS = 'your_password';

async function scrapeWithRotation(urls) {
  const browser = await puppeteer.launch({
    headless: true,
    args: [`--proxy-server=http://${PROXY_HOST}:${PROXY_PORT}`],
  });

  const results = [];
  for (const url of urls) {
    const page = await browser.newPage();
    await page.authenticate({ username: PROXY_USER, password: PROXY_PASS });
    try {
      await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 });
      const title = await page.title();
      results.push({ url, title });
    } catch (error) {
      console.error(`Error scraping ${url}:`, error.message);
    } finally {
      await page.close();
    }
  }

  await browser.close();
  return results;
}

const urls = [
  'https://example.com',
  'https://example.org',
  'https://example.net',
];

scrapeWithRotation(urls).then(console.log);

Каждая новая страница будет использовать ротационный IP из пула Dataimpulse.

Шаг 5: Обработка параллелизма и ошибок

Для высокообъемного веб-скрапинга необходимо корректно обрабатывать параллелизм и ошибки. Используйте puppeteer-cluster для управления несколькими страницами параллельно с учетом ограничений памяти.

npm install puppeteer-cluster
const { Cluster } = require('puppeteer-cluster');

const PROXY_HOST = 'YOUR_ENDPOINT_HOST';
const PROXY_PORT = 'YOUR_ENDPOINT_PORT';
const PROXY_USER = 'your_username';
const PROXY_PASS = 'your_password';

(async () => {
  const cluster = await Cluster.launch({
    concurrency: Cluster.CONCURRENCY_PAGE,
    maxConcurrency: 5, // Adjust based on your resources
    puppeteerOptions: {
      headless: true,
      args: [`--proxy-server=http://${PROXY_HOST}:${PROXY_PORT}`],
    },
  });

  cluster.on('taskerror', (err, data) => {
    console.error(`Error scraping ${data}:`, err.message);
  });

  await cluster.task(async ({ page, data: url }) => {
    await page.authenticate({ username: PROXY_USER, password: PROXY_PASS });
    await page.goto(url, { waitUntil: 'domcontentloaded' });
    const title = await page.title();
    console.log(`Scraped ${url} - Title: ${title}`);
  });

  const urls = [
    'https://example.com',
    'https://example.org',
    'https://example.net',
    // Add more URLs
  ];

  for (const url of urls) {
    cluster.queue(url);
  }

  await cluster.idle();
  await cluster.close();
})();

Эта настройка позволяет одновременно парсить несколько страниц, используя ротационные прокси Dataimpulse.

Шаг 6: Тестирование и проверка

Запустите свой скрипт и убедитесь, что:

  • IP-адрес меняется между запросами (проверьте с помощью https://httpbin.org/ip).
  • Ошибки аутентификации прокси не возникают.
  • Целевые страницы загружаются корректно.

Вы также можете логировать IP, используемый для каждого запроса, чтобы убедиться, что ротация работает.

Устранение неполадок

  • 407 Proxy Authentication Required: Перепроверьте ваше имя пользователя и пароль. Убедитесь, что вы используете правильный метод аутентификации (page.authenticate()).
  • Тайм-ауты соединения: Увеличьте опцию timeout в page.goto(). Также убедитесь, что конечная точка и порт прокси указаны правильно.
  • Браузер не запускается с ошибкой прокси: Убедитесь, что аргумент --proxy-server использует правильный формат: http://host:port (без учетных данных в URL).
  • Ротация не работает: Ротационная конечная точка Dataimpulse должна предоставлять новый IP для каждого нового соединения. Если вам нужны липкие сессии, используйте выделенный порт для липких сессий, указанный в вашей панели управления.

Резюме

Вы узнали, как интегрировать резидентные прокси Dataimpulse с Puppeteer в Windows для продвинутого веб-скрапинга. Используя аутентификацию прокси Puppeteer и ротационный пул IP-адресов Dataimpulse, вы можете создавать масштабируемые скраперы, которые избегают блокировок по IP. Не забывайте обрабатывать ошибки, управлять параллелизмом и соблюдать условия обслуживания веб-сайтов.