CoderCastrov logo
CoderCastrov
Node.js

Парсинг веб-сайтов с помощью Node-Unblocker

Парсинг веб-сайтов с помощью Node-Unblocker
просмотров
7 мин чтение
#Node.js

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

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

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


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

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

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

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

Как использовать node-unblocker?

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

mkdir playground
npm i unblocker express --save

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

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

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

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

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

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

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

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

app.use(unblocker);

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

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

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

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

node unblocker.js

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

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

Это откроет страницу Amazon, и сервер Amazon увидит IP-адрес вашего сервера node-unblocker. Поскольку вы работаете на локальной машине, 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. А что, если вы хотите использовать его в коммерческих целях? Для этого вам нужно разместить несколько серверов node-unblocker и направить через них весь входящий трафик.

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

Развертывание node-unblocker на Heroku

Прежде чем начать, вам нужно выполнить два действия.

Перед развертыванием кода на сервере мы должны настроить файл 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 определить, какую версию node нужно запустить.
  • Еще одно изменение, которое мы внесли, это тег start. Это поможет 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, который вы передаете после proxy/, будет проходить через прокси-сервер.

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

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

Мы будем использовать unirest для выполнения 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 и т. д., не будут работать с node-unblocker. Если вы попытаетесь парсить их, не будет установлено TCP-соединение. Эти веб-сайты либо выдадут капчу, либо разорвут соединение сразу в начале.

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

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

Заключение

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

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

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

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

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

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