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