Парсинг веб-сайтов с помощью Node-Unblocker
Table Of Content
- Что именно такое node-unblocker и что оно делает?
- Как использовать node-unblocker?
- Полный код
- Прокси-сеть Node-Unblocker
- Развертывание node-unblocker на Heroku
- Использование Node-Unblocker в качестве прокси для парсинга веб-страниц
- Ограничения Node-Unblocker
- Обход OAuth
- Не способен работать с крупными веб-сайтами
- Заключение
- Дополнительные ресурсы
Как вы знаете, прокси и 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.
Пожалуйста, поделитесь этим блогом в своих социальных сетях. Дайте мне знать, если у вас есть вопросы по парсингу. Я буду рад помочь вам.
Дополнительные ресурсы
Вот несколько дополнительных ресурсов, которые могут быть полезными во время вашего путешествия по парсингу: