темный логотип proxyscrape

An Introduction To Web Scraping With Node.js (JavaScript)

Скрапбукинг, Янв-06-20225 минут чтения

Are you looking for ways to make use of new technologies? Web extraction or web scraping provides you with a way to collect structured web data in an automated manner. For instance, web scraping is used in the E-commerce world to monitor the pricing of competitors’ services and products. Other use cases of web scraping

Оглавление

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

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

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

  • Приложения для потоковой передачи данных
  • Одностраничные приложения
  • Приложения с границами входа/выхода
  • Приложения реального времени с интенсивным использованием данных

Зачем использовать Node.js для веб-скрапинга?

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

Легкость изучения - Javascript является популярным языком программирования, используемым разработчиками фронтенда. Они могут быстро освоить и использовать Node.js в бэкенде, поскольку это простой Javascript. Поэтому им не придется прилагать дополнительные усилия для изучения Node.js.

Единый язык программирования - Вы можете использовать Node.js для написания серверных приложений на Javascript. Одним словом, разработчики Node.js используют Javascript для написания как фронтенд-, так и бэкенд-веб-приложений. Им не нужно использовать какой-либо другой язык программирования для серверной части. Таким образом, они могут легко развертывать веб-приложения, поскольку почти все веб-браузеры поддерживают Javascript. 

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

Высокая производительность - Node.js использует движок V8 Javascript от Google для интерпретации кода Javascript при его компиляции непосредственно в машинный код. Таким образом, вы можете эффективно реализовать код, используя этот движок. 

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

Веб-скрепинг с помощью Node.js

Для веб-скрапинга с помощью Node.js мы будем использовать следующие два модуля npm .

cheerio - Это технология Javascript, используемая для извлечения данных с веб-сайтов. Она помогает выбирать, редактировать и просматривать элементы DOM.

request-promise - Это простой HTTP-клиент, который можно использовать для быстрых и простых HTTP-вызовов.

Настройка проекта

Вам нужно создать новую папку проекта. В этой папке создайте файл index.js. Затем необходимо установить зависимости. Для этого откройте командную строку и введите следующую команду. 

npm install --save request request-promise cheerio

Вы должны потребовать request-promise и cheerio в вашем файле index.js, используя приведенный ниже код.

const rp = require('request-promise');
const cheerio = require('cheerio');

Установить запрос

Вы знаете, что request-promise - это клиентский "запрос " с поддержкой Promise. Другими словами, он принимает объект на вход и возвращает обещание. 

const options = {
 uri: `https://www.yourURLhere.com`,
 transform: function (body) {
   return cheerio.load(body);
 }
};

В приведенном выше коде объект options должен выполнять две задачи.

  • Передав URL-адрес, вы хотите выполнить поиск
  • Загрузите возвращаемый HTML с помощью cheerio, чтобы вы могли его использовать.

Ключ uri в коде - это сайт, который вы хотите соскоблить.

Ключ преобразования загружает возвращенное тело в cheerio с помощью request-promise, а затем возвращает его нам.

Сделать запрос

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

rp(OPTIONS)
   .then(function (data) {
       // REQUEST SUCCEEDED: DO SOMETHING
   })
   .catch(function (err) {
       // REQUEST FAILED: ERROR OF SOME KIND
   });

В приведенном выше коде мы передаем объект options в request-promise. Затем мы ждем, чтобы увидеть, будет ли наш запрос успешным или неудачным. 

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

rp(options)
 .then(($) => {
   console.log($);
 })
 .catch((err) => {
   console.log(err);
 });

Замените в поле uri местоимение uri на веб-сайт, который вы хотите отсканировать. Затем откройте консоль и введите в файл index.js следующее.

{ [Function: initialize]
 fn:
  initialize {
    constructor: [Circular],
    _originalRoot:
     { type: 'root',
       name: 'root',
       namespace: 'http://www.w3.org/1999/xhtml',
       attribs: {},
       ...

Вот как вы можете сделать свой первый скрап с помощью Node.js. Вот полный код, который мы сделали на данный момент.

const rp = require('request-promise');
const cheerio = require('cheerio');
const options = {
  uri: `https://www.google.com`,
  transform: function (body) {
    return cheerio.load(body);
  }
};

rp(options)
  .then(($) => {
    console.log($);
  })
  .catch((err) => {
    console.log(err);
  });

Используйте данные

Вы можете использовать cheerio для извлечения нужных вам данных. Реализация селектора в cheerio почти такая же, как и в jQuery. Вы можете использовать метод selector для обхода и выбора элементов в документе. Вы также можете использовать его для получения и установки данных. Например, вы хотите взять следующий HTML-файл веб-сайта.

 id="cities">
 class="large">Европа
 id="medium">Турция
 class="small">Салем.

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

$('.large').text()
// Европа
$('#medium').text()
// Турция
$('li[class=small]').html()

Мы можем использовать функцию each() для перебора нескольких элементов. Мы можем вернуть внутренний текст элемента списка, используя тот же HTML-код, что показан выше.

$('li').each(function(i, elem) {
 cities[i] = $(this).text();
});

Вот как можно соскребать данные с веб-сайтов с помощью Node.js. Вы также можете использовать дополнительные методы для извлечения данных из дочерних элементов списка или HTML-файла веб-сайта.

Важность использования Node.js с прокси-серверами

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

Residential Proxy - этот прокси содержит IP-адреса от местного интернет-провайдера (ISP), поэтому целевой сайт не может определить, реальный ли это человек или скрепер, просматривающий сайт. 

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

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

Вы можете использовать прокси для веб-скрапинга с помощью модуля requests в Python. Сначала нужно импортировать модуль requests. Затем нужно создать пул прокси и перебрать их. Вы можете использовать requests.get() для отправки GET-запроса, передав прокси в качестве параметра URL, как показано ниже.

import requests
proxy = 'http://114.121.248.251:8080'
url = 'https://ipecho.net/plain'
# Sending a GET request to the url and
# passing the proxy as a parameter.
page = requests.get(url,
                   proxies={"http": proxy, "https": proxy})
 # Printing the content of the requested url.
print(page.text)

Вы получите следующий результат.

Заключение о веб-скрапинге с помощью Node.js

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