CoderCastrov logo
CoderCastrov
Node.js

Как использовать node js и puppeteer для парсинга

Как использовать node js и puppeteer для парсинга
просмотров
5 мин чтение
#Node.js

#nodejs #парсинг #веб #javascript

Что такое парсинг?

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

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

Как работает парсер веб-сайтов

Парсер веб-сайтов работает путем извлечения данных из фронтенда веб-сайта и их обработки. Обычно парсер извлекает компоненты веб-страницы, такие как HTML. Он собирает несколько URL-адресов с различных веб-сайтов, с которых затем извлекает данные.

Полученные данные обычно обрабатываются дата-сайентистами для последующего анализа. Затем данные сохраняются в базе данных или преобразуются в удобный формат, такой как JSON, XML или CSV. Хранящиеся данные могут быть использованы в качестве API.

Преимущества парсинга веб-сайтов

С помощью парсинга данных можно легко получить данные без необходимости ручного копирования и вставки. Это позволяет бизнесменам быстро получать данные о своих конкурентах. Парсинг данных является эффективным способом развития бизнеса.

1. Мониторинг конкурентов

Успешный бизнес - это бизнес, который внимательно следит за конкурентами. Вы можете исследовать информацию, такую как новые продукты, стратегии конкурентов на рынке, даже анализировать аудиторию своих социальных сетей. Эти данные могут быть использованы для поиска потенциальных клиентов для вашей компании.

2. Определение цены

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

3. Получение потенциальных клиентов

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

Руководство по парсингу веб-страниц

Puppeteer

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

Некоторые из наиболее полезных функций puppeteer включают:

Установка

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

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

npm i puppeteer

или

yarn add puppeteer

После установки puppeteer он появится в каталоге node_modules вашего проекта.

Создание простого парсера с использованием Node.js

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

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

index.js

const puppeteer = require('puppeteer')

async function scrape() {
}
scrape()

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

index.js

const puppeteer = require('puppeteer')

async function scrape() {
   const browser = await puppeteer.launch({})
   const page = await browser.newPage()
}
scrape()

Парсинг первого синонима "умный"

Чтобы найти и скопировать селектор первого синонима "умный", который мы будем использовать для поиска синонимов на веб-странице тезауруса, сначала откройте страницу тезауруса синонимов "умный", щелкните правой кнопкой мыши на первом синониме и выберите "Inspect". Это позволит отобразить DOM этой веб-страницы справа на вашем экране:

Затем щелкните правой кнопкой мыши на выделенном HTML-элементе, содержащем первый синоним, и выберите "Copy selector":

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

Сначала создайте переменную "page" и перейдите на https://www.thesaurus.com/browse/smart в новом экземпляре браузера.

Затем мы определяем переменную "element", ожидая, пока элемент, который мы хотим, появится в DOM веб-страницы.

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

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

index.js

const puppeteer = require('puppeteer')

async function scrape() {
   const browser = await puppeteer.launch({})
   const page = await browser.newPage()

   await page.goto('https://www.thesaurus.com/browse/smart')
   var element = await page.waitForSelector("#meanings > div.css-ixatld.e15rdun50 > ul > li:nth-child(1) > a")
   var text = await page.evaluate(element => element.textContent, element)
   console.log(text)
   browser.close()
}
scrape()

Тестирование

Теперь, если вы запустите свой скрипт index.js с помощью "node index.js", вы увидите, что он выводит первый синоним слова "smart".

Парсинг 5 лучших синонимов для слова "smart"

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

index.js

const puppeteer = require('puppeteer')

async function scrape() {
   const browser = await puppeteer.launch({})
   const page = await browser.newPage()

   await page.goto('https://www.thesaurus.com/browse/smart')
   for(i = 1; i < 6; i++){
    var element = await page.waitForSelector("#meanings > div.css-ixatld.e15rdun50 > ul > li:nth-child(" + i + ") > a")
    var text = await page.evaluate(element => element.textContent, element)
    console.log(text)
   }
   browser.close()
}
scrape()

Переменная "element" будет иметь значение "#meanings > div.css-ixatld.e15rdun50 > ul > li:nth-child(1) > a" на первой итерации, "#meanings > 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()":

Конечное замечание

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

Он также имеет 2 недостатка:


Заключение

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


10119003-Ivan Faathirza

Программа Информатики

Факультет Техники и Компьютерных Наук

Индонезийский Компьютерный Университет