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

Но как вы можете использовать эту функциональность в API во время парсинга веб-страниц? Чтобы преодолеть это препятствие, вы можете использовать node-unblocker. Node-unblocker может разблокировать двери любого веб-сайта с ограничением скорости. Независимо от того, какой веб-сайт вы пытаетесь очистить, node-unblocker добавит слой для передачи всех входящих запросов через прокси. Это помогает парсить сайты без каких-либо ограничений.

node-unblocker имеет некоторые преимущества и недостатки. В этом посте мы сначала узнаем, как мы можем его использовать, а затем проанализируем его плюсы и минусы.

Что такое node-unblocker и что он делает?

Ну, это своего рода веб-прокси, разработанный в Nodejs, который можно использовать в среде Express для обхода каждого входящего запроса через прокси. Они утверждают, что являются самыми быстрыми прокси-серверами, доступными на рынке сегодня.

Если вы хотите очистить что-то за стеной входа в систему или если вы хотите очистить веб-сайты, используя вызовы AJAX для рендеринга данных, этот прокси-сервер может творить для вас чудеса, но если ваш целевой веб-сайт — Facebook или Google, этот прокси не будет работать.

Но общее впечатление от узла-разблокировщика состоит в том, что он может увеличить ограничение скорости (я бы не сказал удалить ограничение скорости). Давайте посмотрим, как мы можем реализовать это в нашем экспресс-API.

Как использовать нод-разблокировщик?

Я предполагаю, что вы уже установили Nodejs и npm на свой компьютер. Затем создайте папку и установите необходимые библиотеки.

mkdir playground
npm i unblocker express --save

Используя экспресс фреймворк, мы сможем настроить веб-сервер, а с помощью разблокировщика мы сможем отправить анонимный запрос на наши целевые веб-сайты. Создайте файл внутри этой папки с любым именем, которое вам нравится. Я буду использовать unblocker.js. Давайте создадим образец веб-сервера шаг за шагом.

var express = require('express')
var Unblocker = require('unblocker');

Мы создали ссылку на функцию, используя require of express и unblocker.

var app = express();
var unblocker = new Unblocker({prefix: '/proxy/'});

Теперь мы создали экземпляры Express и Unblocker. Unblocker предоставляет вам несколько параметров конфигурации, таких как:

  • clientScripts — это логическое значение, через которое вы можете внедрить Javascript.
  • requestMiddleware — это набор функций, которые используются для обработки входящего запроса перед его отправкой на хост-сервер.

На данный момент мы будем использовать только свойство префикса unblocker. В настоящее время мы установили префикс /proxy/, и это путь, по которому мы можем получить доступ к прокси.

Теперь, чтобы смонтировать промежуточное ПО по указанному пути, мы будем использовать функцию app.use().

app.use(unblocker);

Теперь давайте воспользуемся функцией listen() для прослушивания входящего соединения на указанном хосте и порту.

app.listen(process.env.PORT || 8080).on('upgrade', unblocker.onUpgrade);

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

Давайте запустим это, передав образец целевого URL с amazon.com.

node unblocker.js

Как только ваш сервер будет готов, откройте этот URL-адрес в своем браузере или POSTMAN.

http://localhost:8080/proxy/https://www.amazon.com/dp/B08WVVBWCN

Это откроет страницу amazon, и сервер amazon увидит IP-адрес вашего сервера узла-разблокировщика. Поскольку вы работаете на локальном компьютере, IP-адрес не изменится, но как только вы разместите его на каком-либо VPS, вы сможете использовать его в качестве прокси-сервера.

Полный код

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

var express = require('express')
var Unblocker = require('unblocker');
var app = express();
var unblocker = new Unblocker({prefix: '/proxy/'});


app.use(unblocker);


app.listen(process.env.PORT || 8080).on('upgrade', unblocker.onUpgrade);

Прокси-сеть Node-Unblocker

Надеюсь, у вас есть представление о том, как на самом деле работает node-unblocker. Теперь, что, если вы хотите использовать его в коммерческих целях? Ну, для этого вам нужно разместить кучу серверов разблокировки узлов, и через них вы должны пропускать весь входящий трафик.

Давайте разместим один сервер разблокировки узлов на Heroku, а затем используем его в качестве прокси-сервера.

Разверните узел-разблокировщик на Heroku

Прежде чем начать, вы должны сделать две вещи.

  1. Зарегистрируйтесь на Хероку.
  2. Установите Heroku CLI.

Перед развертыванием кода на сервере нам необходимо настроить файл package.json. Это поможет Heroku установить и запустить необходимые вещи.

{
  "name": "play",
  "version": "1.0.0",
  "description": "",
  "main": "unblocker.js",
  "engines": {
    "node": "14.x"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node unblocker.js"
  },
  "author": "",
  "license": "ISC"
}

Мы внесли два изменения в наш файл package.json.

  • Мы добавили объект engines, который поможет Heroku определить, какая версия узла должна быть запущена.
  • Мы также добавили начальный тег. Это поможет Heroku запустить основной файл.

Мы должны создать файл .gitignore, с помощью которого мы можем избежать отправки ненужных папок на сервер.

!node_modules/

node_modules/*
!node_modules/module-a/

После того, как вы зарегистрируетесь в Heroku, вам нужно создать приложение. Я назвал его play-unblocker.

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

heroku login

Команда heroku login поможет нам идентифицировать нашу личность в Heroku.

Теперь мы инициализируем репозиторий git в каталоге, где находится наш сервер play-unblocker. Вторым шагом будет настройка пульта Heroku на приложение, которое мы создали на нашей панели инструментов Heroku. В нашем случае это play-unblocker.

Теперь осталось только отправить код на сервер.

git add .
git commit -am "first deploy"
git push heroku master

После развертывания сервера вы сможете получить доступ к своему приложению по адресу https://play-unblocker.herokuapp.com/proxy/https://www.scrapingdog.com/. Любой URL-адрес, который вы передаете после прокси/, будет проходить через прокси-уровень.

Поскольку теперь все настроено, мы можем создать скрипт nodejs, в котором мы будем использовать этот сервер в качестве прокси.

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

Мы будем использовать unirest для выполнения HTTP-запроса GET к целевому веб-сайту. Вы можете установить unirest следующим образом.

npm i unirest --save

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

var unirest = require('unirest');


async function test(){
  let data = await unirest.get('https://play-unblocker.herokuapp.com/proxy/https://www.amazon.com/')
  console.log(data)
  return 1
}


let scraped_data = test()

Как только вы запустите этот код, вы получите HTML-данные вашего целевого веб-сайта.

Ограничения Node-Unblocker

Что касается настройки, то node-unblocker получает десять из десяти, но если вы хотите использовать его в качестве автономного прокси для своих парсинг-проектов, то, по моему мнению, это большое НЕТ. Бесперебойная работа парсера требует тщательной фоновой проверки пула прокси-серверов, а также потока данных. Давайте проверим, каковы его ограничения в деталях.

Обход OAuth

Node-Unblocker не будет работать со страницами, использующими формы OAuth. Кроме того, он не будет работать ни с одной страницей, поддерживающей метод postMessage. Таким образом, вы можете использовать его только с обычными формами входа и содержимым AJAX.

Не подходит для больших сайтов

Такие веб-сайты, как Amazon, Google, Facebook и т. д., не будут работать с блокировщиком узлов. Если вы попытаетесь очистить его, TCP-соединение не будет установлено. Эти веб-сайты либо выдают капчу, либо разрывают соединение в самом начале.

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

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

Заключение

Точно так же вы можете создать больше таких серверов, а затем использовать их в качестве пула прокси в своем скрипте очистки. Вы можете чередовать эти серверы при каждом новом запросе, чтобы каждый входящий запрос проходил через новый IP-адрес.

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

Надеюсь, теперь у вас есть хорошее представление о том, что такое разблокировщик узлов и как его можно использовать на вашем сервере узлов.

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

Дополнительные ресурсы

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