Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя
Я по образованию: Преподаватель истории и обществознания, юрист, менеджер по управлению...  · 7 апр 2022  ·
club_knowledges

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

Веб-скрапинг:
Web Scraping — это способ сбора всех видов общедоступных данных, таких как цены, текст, изображения, контактная информация и многое другое из всемирной паутины. Это может быть полезно при попытке собрать данные, сбор и систематизация которых вручную может занять у человека много времени.
Некоторые из наиболее полезных вариантов использования веб-скрапинга включают в себя:
  1. Сбор цен на товары с сайтов электронной коммерции, таких как Amazon, eBay или Alibaba.
  2. Скрапинг постов в социальных сетях, лайков, комментариев, подписчиков или биографий.
Puppeteer
Хотя существует несколько различных библиотек для парсинга веб-страниц с помощью Node.js, в этом руководстве я буду использовать библиотеку puppeteer.
Puppeteer — это популярный и простой в использовании пакет npm, используемый для веб-автоматизации и очистки веб-страниц.
Некоторые из наиболее полезных функций Puppeteer включают в себя:
  1. Возможность извлечь текстовое содержимое очищенного элемента.
  2. Возможность взаимодействовать с веб-страницей, заполняя формы, нажимая кнопки или выполняя поиск внутри панели поиска.
  3. Возможность очищать и загружать изображения из Интернета.
  4. Возможность видеть, как выполняется веб-скрапинг, используя безголовый режим.
Подробнее о puppeteer можно прочитать здесь
Установка
Для этого руководства я предполагаю, что у вас уже установлены модули npm и node_modules , а также файлы package.json и package-lock.json .
Если вы этого не сделаете, вот отличное руководство о том, как это сделать: Настройка
Чтобы установить puppeteer, выполните одну из следующих команд в терминале вашего проекта:
npm i puppeteer
Или
yarn add puppeteer
Как только puppeteer будет установлен, он появится в виде каталога внутри вашего node_modules.
Давайте создадим простой скрипт парсинга веб-страниц на Node.js.
Сценарий веб-скрейпинга получит первый синоним слова «умный» из веб-тезауруса следующим образом:
  1. Получение HTML-содержимого веб-страницы веб-тезауруса.
  2. Поиск элемента, который мы хотим очистить, через его селектор.
  3. Отображение текстового содержимого извлеченного элемента.
Давайте начнем!
Перед очисткой, а затем извлечением текста этого элемента с помощью его селектора в 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()
Вычищаем первый синоним слова «smart»
Чтобы найти и скопировать селектор первого синонима «smart», который мы собираемся использовать для поиска синонима на веб-странице веб-тезауруса, сначала перейдите к синонимам веб-тезауруса «smart» , справа нажмите на первый синоним и нажмите «inspect». Это сделает всплывающее окно DOM этой веб-страницы в правой части экрана:
Затем щелкните правой кнопкой мыши выделенный элемент HTML, содержащий первый синоним, и нажмите «copy selector»:
Наконец, чтобы перейти к веб-тезаурусу, соскребите и отобразите первый синоним слова «smart» с помощью селектора, который мы скопировали ранее:
  1. Во-первых, заставьте переменную «страница» перейти на https://www.thesaurus.com/browse/smart внутри только что созданного экземпляра браузера.
  2. Затем мы определяем переменную «элемент», заставляя страницу ожидать появления селектора желаемого элемента в DOM веб-страницы.
  3. Затем текстовое содержимое элемента извлекается с помощью функции Assessment() и отображается внутри переменной text.
  4. Наконец, мы закрываем экземпляр браузера.
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.waitFor("#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 лучших синонимов слова умный
Мы можем реализовать тот же код для очистки 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.waitFor("#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: n-й ребенок (5) > a ".
Как видите, единственное, что меняется в переменной «element» на протяжении итераций, — это значение «li:nth-child()».
Это связано с тем, что в нашем случае все элементы, которые мы пытаемся очистить, являются элементами «li» внутри элемента «ul»,
поэтому мы можем легко очистить их по порядку, увеличив значение внутри "li:nth-child()":
  1. li:nth-child(1) для первого синонима.
  2. li:nth-child(2) для второго синонима.
  3. li:nth-child(3) для третьего синонима.
  4. li:nth-child(4) для четвертого синонима.
  5. And li:nth-child(5) для пятого синонима.
Заключительные заметки
В то время как веб-скрапинг имеет много преимуществ, таких как:
  1. Экономия времени на ручном сборе данных.
  2. Возможность программно объединять фрагменты данных, извлеченных из Интернета.
  3. Создание набора данных, который может быть полезен для машинного обучения, визуализации данных или анализа данных.
Также у него есть 2 недостатка:
  1. Некоторые веб-сайты не позволяют очищать свои данные, например, Craigslist.
  2. Некоторые люди считают это серой зоной, поскольку в некоторых случаях использования парсинга веб-страниц практикуется сбор и хранение данных о пользователях или объектах.
Надеюсь, эта статья дала вам некоторое представление о парсинге веб-страниц в Node.js, его практическом применении, плюсах и минусах, а также о том, как извлекать определенные элементы и их текстовое содержимое с веб-страниц с помощью библиотеки puppeteer.