Веб-парсинг с использованием Node.js

Веб-парсинг с использованием Node.js

6 апреля 2022 г.

Веб-скрапинг:


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


Некоторые из наиболее полезных вариантов использования веб-скрейпинга включают:


  1. Сбор цен на товары с сайтов электронной коммерции, таких как Amazon, eBay или Alibaba.

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

  1. Удаление контактов с таких сайтов, как Yellowpages или Linkedin.

Кукольник


Хотя существует несколько различных библиотек для парсинга веб-страниц с помощью Node.js, в этом руководстве я буду использовать библиотеку puppeteer.


Puppeteer — это популярный и простой в использовании пакет npm, используемый для веб-автоматизации и очистки веб-страниц.


К наиболее полезным функциям Puppeteer относятся:


  1. Возможность извлечь текстовое содержимое очищенного элемента.

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

  1. Возможность очищать и загружать изображения из Интернета.

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

Вы можете прочитать больше о кукловоде [здесь] (https://github.com/puppeteer/puppeteer)


Установка


Для этого руководства я предполагаю, что у вас уже установлены npm и node_modules, а также файлы package.json и package-lock.json.


Если нет, вот отличное руководство о том, как это сделать: Настройка


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


нпм я кукловод


Или


пряжа добавить кукольника


Как только puppeteer будет установлен, он появится в виде каталога внутри вашего node_modules.


Создадим простой скрипт веб-скрейпинга на Node.js


Сценарий веб-скрейпинга получит первый синоним слова «умный» из веб-тезауруса следующим образом:


  1. Получение HTML-содержимого веб-страницы веб-тезауруса.

  1. Находим элемент, который мы хотим очистить через его селектор.

  1. Отображение текстового содержимого извлеченного элемента.

Скрапинг


Давайте начнем!


Перед очисткой, а затем извлечением текста этого элемента с помощью его селектора в Node.js, нам нужно сначала настроить несколько вещей:


Создайте или откройте пустой файл javascript, вы можете назвать его как хотите, но для этого урока я назову свой «index.js». Затем потребуйте puppeteer в первой строке и создайте асинхронную функцию, внутри которой мы будем писать наш код парсинга веб-страниц:


index.js


```javascript


const puppeteer = требовать('кукловод')


асинхронная функция очистки () {


очистить ()


Затем запустите новый экземпляр браузера и определите переменную «page», которая будет использоваться для навигации по веб-страницам и извлечения элементов из HTML-содержимого веб-страницы:


index.js


```javascript


const puppeteer = требовать('кукловод')


асинхронная функция очистки () {


const browser = await puppeteer.launch({})


константная страница = ожидание browser.newPage()


очистить ()


Скрапинг первого синонима слова «умный»


Чтобы найти и скопировать селектор первого синонима «умный», который мы собираемся использовать для поиска синонима на веб-странице веб-тезауруса, сначала перейдите к [синонимы веб-тезауруса «умный»] (https://www.thesaurus.com/browse/smart), щелкните правой кнопкой мыши первый синоним и выберите «проверить». Это сделает всплывающее окно DOM этой веб-страницы в правой части экрана:


Проверить


Затем щелкните правой кнопкой мыши выделенный элемент HTML, содержащий первый синоним, и нажмите «селектор копирования»:


Селектор копирования


Наконец, чтобы перейти к веб-тезаурусу, соскребите и отобразите первый синоним слова «умный» с помощью селектора, который мы скопировали ранее:


  1. Во-первых, сделайте так, чтобы переменная page переместилась на https://www.thesaurus.com/browse/smart внутри только что созданного экземпляра браузера.

  1. Затем мы определяем переменную «элемент», заставляя страницу ожидать появления селектора желаемого элемента в DOM веб-страницы.

  1. Затем текстовое содержимое элемента извлекается с помощью функции Assessment() и отображается внутри переменной text.

  1. Наконец, мы закрываем экземпляр браузера.

index.js


```javascript


const puppeteer = требовать('кукловод')


асинхронная функция очистки () {


const browser = await puppeteer.launch({})


константная страница = ожидание browser.newPage()


ожидайте page.goto('https://www.thesaurus.com/browse/smart')


var element = await page.waitFor("#meanings > div.css-ixatld.e15rdun50 > ul > li:nth-child(1) > a")


var text = await page.evaluate(element => element.textContent, element)


console.log(текст)


браузер.закрыть()


очистить ()


Время проверить


Теперь, если вы запустите свой скрипт index.js, используя «node index.js», вы увидите, что он отобразил первый синоним слова «умный»:


Тест


5 лучших синонимов слова умный


Мы можем реализовать тот же код для очистки 5 лучших синонимов слова smart вместо 1:


index.js


```javascript


const puppeteer = требовать('кукловод')


асинхронная функция очистки () {


const browser = await puppeteer.launch({})


константная страница = ожидание browser.newPage()


ожидайте page.goto('https://www.thesaurus.com/browse/smart')


для (я = 1; я < 6; я ++) {


var element = await page.waitFor("#meanings > div.css-ixatld.e15rdun50 > ul > li:nth-child(" + i + ") > a")


var text = await page.evaluate(element => element.textContent, element)


console.log(текст)


браузер.закрыть()


очистить ()


5 синонимов


Переменная "element" будет иметь вид: "#meanings > div.css-ixatld.e15rdun50 > ul > li:nth-child(1) > a" на первой итерации, "# значения > div.css-ixatld.e15rdun50 > ul > li:nth-child(2) > a" на втором, и так далее, пока не будет достигнута последняя итерация, где переменная "element" будет "#meanings > div.css-ixatld.e15rdun50 > ul > li:nth-child(5) > a".


Как видите, единственное, что меняется в переменной «element» на протяжении итераций, — это значение «li:nth-child()».


Это связано с тем, что в нашем случае все элементы, которые мы пытаемся очистить, являются элементами «li» внутри элемента «ul»,


поэтому мы можем легко очистить их по порядку, увеличив значение внутри "li:nth-child()":


  1. li:nth-child(1) для первого синонима.

  1. li:nth-child(2) для второго синонима.

  1. li:nth-child(3) для третьего синонима.

  1. li:nth-child(4) для четвертого синонима.

  1. И li:nth-child(5) для пятого синонима.

Заключительные замечания


В то время как веб-скрапинг имеет много преимуществ, таких как:


  1. Экономия времени на ручном сборе данных.

  1. Возможность программно объединять фрагменты данных, извлеченных из Интернета.

  1. Создание набора данных, который может быть полезен для машинного обучения, визуализации данных или анализа данных.

Также у него есть 2 недостатка:


  1. Некоторые веб-сайты не позволяют очищать свои данные, например, Craigslist.

  1. Некоторые люди считают, что это серая зона, поскольку в некоторых случаях использования парсинга веб-страниц практикуется сбор и хранение данных о пользователях или объектах.

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


Также опубликовано [Здесь] (https://dev.to/code_jedi/web-scraping-in-nodejs-2lkf)



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE