перейти к содержанию

Обход блокировок веб-скрапинга с помощью Node-Unblocker

Привет всем!

Итак, вы создали потрясающий веб-скребок с помощью Node.js, но сайты продолжают блокировать ваши запросы? Мы все были там!

В этом подробном руководстве, состоящем из более чем 3000 слов, вы узнаете, как использовать Node-Unblocker для обхода блокировок и очистки любого сайта.

Что такое Node-Unblocker и зачем его использовать?

Node-Unblocker — это модуль Node.js с открытым исходным кодом, который позволяет запускать прокси-сервер с настраиваемым промежуточным программным обеспечением для изменения запросов и ответов.

Вот некоторые из ключевых причин, почему Node-Unblocker так полезен для парсинга веб-страниц:

  • Избегайте блокировки IP-адресов – Направляя парсер через прокси, вы можете избежать бана по IP из-за слишком большого количества запросов с одного IP-адреса. Это имеет решающее значение для успешного крупномасштабного парсинга.

  • Обход географических блоков – Многие сайты ограничивают доступ к контенту в зависимости от местоположения. С помощью Node-Unblocker вы можете проксировать IP-адреса в определенных регионах, чтобы обойти эти блокировки.

  • Парсинг JavaScript-сайтов – Node-Unblocker поддерживает проксирование веб-сокетов, что позволяет парсить сайты, в значительной степени полагающиеся на JavaScript. Многие парсеры испытывают трудности с JS-сайтами.

  • Изменить запросы – Пользовательские промежуточные программы позволяют изменять заголовки запросов, чтобы имитировать браузеры, автоматически обрабатывать вход в систему, кодировать символы и многое другое.

  • Преобразование ответов – Изменяйте и обрабатывайте ответы, используя промежуточное программное обеспечение ответов, прежде чем они достигнут вашего кода парсера.

  • Легкий и быстрый – Node-Unblocker полностью построен на JavaScript, поэтому его можно легко и быстро интегрировать в парсер JS.

Согласно опросам, более 60% веб-сайтов в настоящее время используют меры защиты от парсинга, такие как блокировка IP-адресов, CAPTCHA и обнаружение ботов. Node-Unblocker — ваше секретное оружие для преодоления этих препятствий.

Установка и настройка Node-Unblocker

Давайте сначала рассмотрим, как установить и настроить Node-Unblocker. Мы также создадим образец прокси-сервера, чтобы опробовать его.

Шаг 1. Установите Node-Unblocker

Предполагая, что у вас уже есть проект Node.js, установите Node-Unblocker и Express:

npm install node-unblocker express

Это добавит оба модуля в ваш package.json.

Шаг 2. Инициализируйте экспресс-сервер

В файле сервера инициализируйте приложение Express и экземпляр Node-Unblocker:

// server.js

const express = require(‘express‘);
const Unblocker = require(‘unblocker‘);

const app = express();
const unblocker = Unblocker(); 

// Node-Unblocker is now ready to use!

Шаг 3. Добавьте прокси-маршрут

Для прокси-запросов добавьте маршрут, который перенаправляется через промежуточное ПО Unblocker:

app.get(‘/scrape‘, (req, res) => {
  const url = req.query.url;

  res.redirect(`/proxy/${url}`); 
});

Теперь мы можем отправлять запросы /scrape?url=http://example.com и Node-Unblocker проксирует их.

Шаг 4: Запустите сервер

Наконец, запустите прокси-сервер:

const PORT = 3000;

app.listen(PORT, () => {
  console.log(`Proxy server running on port ${PORT}`);
});

Наш базовый сервер Node-Unblocker теперь запущен и работает!

Далее давайте посмотрим, как мы можем использовать его в наших веб-скребках.

Использование Node-Unblocker для парсинга веб-страниц

Вот некоторые из наиболее распространенных случаев использования Node-Unblocker для парсинга сайтов:

Вращающиеся прокси

Одной из самых больших проблем при парсинге веб-страниц является предотвращение блокировки целевым сайтом после слишком большого количества запросов с одного IP-адреса.

Node-Unblocker предоставляет простой способ реализации решения с ротацией прокси.

Эти шаги являются:

  1. Получите доступ к пулу прокси-серверов. Вы можете использовать такого провайдера, как Luminati or Оксилабс чтобы получить сотни прокси-IP.

  2. Добавьте прокси в список. Например:

const proxies = [
  ‘http://proxy1.com‘,
  ‘http://proxy2.com‘,
  // etc
];
  1. Перед каждым запросом случайным образом выбирайте прокси:
function getRandomProxy() {
  return proxies[Math.floor(Math.random() * proxies.length)];
}
  1. Сделайте запрос на парсинг веб-страниц через прокси:
const proxy = getRandomProxy();

request(`${proxy}/targetUrl`);

Меняя прокси при каждом запросе, вы можете собирать информацию в большом масштабе, не подвергаясь блокировке. Совет для профессионалов: используйте пул прокси как минимум в 10 раз больше, чем количество запросов в секунду.

Обход географических блоков

Некоторые веб-сайты ограничивают доступ к контенту в зависимости от географического местоположения посетителя.

Например, сайт http://usanews.com разрешает трафик только с IP-адресов США. Используя Node-Unblocker, мы можем легко обойти это ограничение.

Эти шаги являются:

  1. Получите резидентные IP-адреса прокси-серверов для вашего целевого региона, например США.

  2. Добавьте эти прокси-серверы для конкретного региона в Node-Unblocker.

  3. Направьте трафик вашего парсера через Node-Unblocker.

Теперь все запросы будут исходить из нужного региона и будут успешно получать доступ к геоблокированному контенту!

Этот метод также работает для моделирования мобильного трафика из конкретной страны, что полезно для очистки мобильных приложений, ориентированных на регион.

Парсинг JavaScript-сайтов

Современные сайты в значительной степени полагаются на JavaScript для отображения контента. Обычные парсеры, которые загружают только HTML, с трудом анализируют эти интерактивные страницы.

К счастью, Node-Unblocker по умолчанию проксирует веб-сокеты, что позволяет парсить JS-сайты:

// Enable websocket proxying
unblocker.listen().on(‘upgrade‘, unblocker.onUpgrade); 

// Make request and JS will execute
request(‘http://jsSite.com‘);  

Сайт будет загружать и запускать JS как настоящий браузер, что позволит успешно извлекать данные.

Однако это хорошо работает только для общедоступных сайтов JavaScript. Для надежного рендеринга JS нужен такой инструмент, как кукольник рекомендуется вместо

Применение промежуточного программного обеспечения для пользовательских запросов

Одной из самых мощных функций Node-Unblocker является настраиваемое промежуточное программное обеспечение. Мы можем использовать их для изменения как запросов, так и ответов.

Несколько примеров того, как промежуточное программное обеспечение запросов может помочь в парсинге веб-страниц:

Ротация пользовательских агентов

Многие сайты блокируют парсеры, которые отправляют один и тот же User-Agent при каждом запросе. Мы можем автоматически повернуть его:

// Randomly choose User-Agent 
unblocker.use((req, res) => {
  const userAgents = [‘UA1‘, ‘UA2‘, ‘UA3‘];

  req.headers[‘User-Agent‘] = userAgents[Math.floor(Math.random() * userAgents.length)];
});

Теперь у каждого запроса будет свой пользовательский агент, предотвращающий эту тактику блокировки.

Автоматическая авторизация

Для сайтов, требующих входа в систему, мы можем добавить учетные данные для аутентификации, не меняя код парсера:

unblocker.use((req, res) => {
  if (req.url.includes(‘mysite.com‘)) {
    req.headers[‘Authorization‘] = ‘Bearer xxx‘;
  }  
});

При любых запросах на сайт пользователь автоматически авторизуется.

Кодирование специальных символов

Некоторые сайты блокируют странные символы, например смайлики. Мы можем запускать пользовательскую кодировку по запросам:

unblocker.use((req, res) => {
  req.url = encodeURI(req.url);

  // Encode headers, body etc
});

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

Как видите, возможности промежуточного программного обеспечения для запросов безграничны!

Обработка ответов

Мы также можем преобразовать данные ответа с помощью промежуточного программного обеспечения ответа:

Анализ и извлечение данных

Вместо того, чтобы извлекать данные в нашем парсере, мы можем сделать это непосредственно в промежуточном программном обеспечении:

unblocker.use((req, res) => {
  const $ = cheerio.load(res.body);

  res.data = $(‘.result‘).text(); 
});

Теперь наш парсер будет получать извлеченные данные напрямую, сохраняя код.

Фильтрация конфиденциальных данных

Некоторые сайты возвращают файлы cookie, заголовки и другие метаданные, которые нам не нужны. Мы можем это очистить:

unblocker.use((req, res) => {

  // Remove unnecessary cookies
  res.headers[‘set-cookie‘] = []; 

  // Delete other unwanted headers
  delete res.headers[‘x-rate-limit‘];
});

Это дает нам только полезные данные ответа.

Кэшировать общие запросы

Для сайтов с часто посещаемыми конечными точками мы можем создать кеш, чтобы избежать превышения ограничений скорости:

// In-memory cache
const cache = {};

unblocker.use((req, res) => {
  if (cache[req.url]) {
    return cache[req.url];
  }

  cache[req.url] = res;
});

Теперь повторные запросы будут обслуживаться напрямую из кеша.

Как видите, промежуточное программное обеспечение ответов чрезвычайно эффективно для обработки данных прямо внутри Node-Unblocker, прежде чем они достигнут вашего парсера.

Node-Unblocker против других прокси

Node-Unblocker предоставляет легкий внутрипроцессный прокси для парсеров Node.js. Однако существуют также специальные прокси-сервисы. Давайте сравним плюсы и минусы:

Node-Unblocker

  • Плюсы

    • Легко и быстро
    • Настраиваемое промежуточное программное обеспечение
    • Интегрируется непосредственно в парсер Node.
  • Минусы

    • Необходимость управления собственными прокси
    • Ограниченные возможности
    • Не оптимизирован для масштабирования

Luminati

  • Плюсы

    • Огромный пул прокси
    • Расширенный менеджер прокси
    • Создано для парсинга веб-страниц
  • Минусы

    • Излишество для небольших скребков
    • Отдельный инструмент для интеграции

Смартпрокси

  • Плюсы

    • Доступные прокси-планы
    • Доступны выделенные IP-адреса
    • Интегрируется через REST API
  • Минусы

    • Нужен отдельный аккаунт
    • Ограниченная настройка

Для крупномасштабного парсинга настоятельно рекомендуется использовать коммерческий прокси-сервис, такой как Luminati или Smartproxy. Они управляют прокси-серверами и упрощают интеграцию через API.

Для небольших и средних парсеров Node-Unblocker предлагает отличный вариант в процессе. Возможность настройки его по мере необходимости делает его действительно мощным.

Распространенные проблемы и способы их устранения

Вот некоторые распространенные проблемы, с которыми вы можете столкнуться при использовании Node-Unblocker, и способы их устранения:

Блокировка сайта Node-Unblocker IP

Это может произойти, если вы используете один и тот же сервер Node-Unblocker для слишком большого количества запросов. Решение состоит в том, чтобы часто менять IP-адреса восходящих прокси-серверов, которые передаются в Node-Unblocker.

Вебсокеты не работают

Убедитесь, что у вас есть unblocker.listen().on(‘upgrade‘, unblocker.onUpgrade) в вашем коде, чтобы включить проксирование веб-сокетов.

Слишком много открытых дескрипторов файлов

Node-Unblocker может превысить лимит открытых файлов при обработке тысяч запросов. Увеличьте максимальное количество открытых файлов в Linux или используйте обратный прокси-сервер, например Nginx, для лучшей обработки сокетов.

Ошибки при парсинге сайтов

Добавьте debug промежуточное программное обеспечение для Node-Unblocker для регистрации всех запросов. Это помогает определить, какой именно запрос не выполняется.

Высокое использование памяти

По умолчанию Node-Unblocker буферизует тела ответов в память, что может вызвать всплески активности. При необходимости используйте потоковую передачу или отключите буферизацию.

Scrape() работает медленно

Node-Unblocker не оптимизирован для сверхвысокой пропускной способности. Используйте выделенный прокси-сервис, например Smartproxy, если вам нужно максимизировать скорость.

Порядок выполнения промежуточного программного обеспечения

Помните о порядке выполнения промежуточного программного обеспечения. Например, промежуточное программное обеспечение ответа выполняется перед промежуточным программным обеспечением запроса на обратном пути.

Правильная настройка Node-Unblocker требует проб и ошибок. Обратитесь к Документы для расширенных параметров конфигурации.

Масштабное развертывание Node-Unblocker

Чтобы запустить Node-Unblocker в продакшене, вам необходимо правильно разместить его на серверах, рассчитанных на высокие нагрузки.

Вот одна рекомендуемая архитектура:

Архитектура разблокировки узлов

Он состоит из следующего:

  • Серверы приложений Node-Unblocker – Они содержат основную логику прокси-приложения. Для высоких нагрузок используйте минимум 2-4 сервера.

  • Обратный прокси (Nginx) – Возглавляет парк Node-Unblocker и балансирует нагрузку между ними. Также обрабатывает SSL и другую логику пограничной маршрутизации.

  • База данных – Для хранения любых постоянных данных приложения, таких как кеши, статистика и т. д. Redis работает хорошо.

  • Восходящие прокси-серверы – IP-адреса внешних прокси, которые передают трафик в Node-Unblocker. Используйте здесь как минимум 50-100+ прокси.

  • Облако хостинг – Используйте такого поставщика, как AWS или GCP, для управления серверами, балансировки нагрузки, аварийного переключения и масштабируемости.

Правильная разработка развертывания Node-Unblocker может без проблем поддерживать более 100,000 XNUMX запросов в день. Обязательно проведите масштабное стресс-тестирование системы перед запуском.

Для еще больших нагрузок используйте выделенный прокси-сервис, такой как Oxylabs, который может легко обрабатывать миллионы запросов через свою глобальную прокси-инфраструктуру.

Лучшие практики для продуктивного парсинга веб-страниц

Вот несколько общих советов, как добиться максимального успеха при парсинге веб-страниц с помощью Node-Unblocker:

  • Используйте случайные интервалы времени – Парсинг сайтов осуществляется через случайные промежутки времени, а не с фиксированной постоянной скоростью. Это помогает избежать шаблонов трафика, которые могут вызвать блокировки.

  • Ограничить количество запросов на IP – Ограничьте запросы Node-Unblocker для каждого IP-адреса восходящего прокси-сервера до разумного предела, например 5 об/мин, чтобы избежать сжигания IP-адресов.

  • Соответствие целевой географии – Используйте прокси-IP-адреса, происходящие из того же региона, что и аудитория вашего целевого сайта. Это помогает избежать блокировки по географическому признаку.

  • Отладка с ведением журнала – Внедрите журналирование запросов, чтобы можно было легко выявлять и воспроизводить ошибки.

  • Учитесь у блоков – Если вас все-таки заблокируют, изучите точный используемый подход к блокировке и настройте свою стратегию, чтобы избежать этого в будущем.

  • Регулярная ротация серверов – Меняйте прокси-серверы и инфраструктуру каждые несколько месяцев, чтобы обновлять все внешние IP-адреса.

  • Используйте прокси-сервисы – Поддерживать собственную прокси-инфраструктуру сложно. Вместо этого для обеспечения надежности используйте корпоративный прокси-сервис.

Парсинг веб-страниц определенно может быть сложной задачей. Но разумно используя такие инструменты, как Node-Unblocker, и следуя передовым практикам, вы можете успешно извлекать данные практически с любого сайта.

Основные выводы

Вот ключевые моменты, которые мы рассмотрели в этом подробном руководстве по парсингу веб-страниц Node-Unblocker:

  • Node-Unblocker предоставляет внутрипроцессный прокси-сервер для маршрутизации запросов веб-скрапинга.
  • Это позволяет реализовать важные функции, такие как ротация прокси, настраиваемое промежуточное программное обеспечение и поддержка веб-сокетов.
  • Правильная настройка Node-Unblocker требует проб и ошибок — используйте отладку для выявления проблем.
  • Для крупномасштабного парсинга рекомендуется использовать специальный прокси-сервис, например Luminati или Smartproxy.
  • Следование передовым практикам парсинга веб-страниц помогает избежать блокировок и надежно извлекать данные.

Node-Unblocker — это универсальный инструмент, который дает вам больше контроля над логикой проксирования по сравнению с внешними сервисами. Интеграция его непосредственно в ваши парсеры открывает возможности нового уровня.

Я надеюсь, что это руководство помогло прояснить тайну Node-Unblocker и понять, как оно может помочь вам успешно очищать и масштабировать извлечение данных с любого веб-сайта! Дайте мне знать, если у вас есть еще вопросы.

Приятного (разблокированного) парсинга!

Теги:

Присоединяйтесь к беседе

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *