Начало работы с парсингом с использованием Cheerio JS
Полное руководство по парсингу с использованием Cheerio JS
Введение
В настоящее время я работаю над проектом, который сильно зависит от Cheerio JS, и я узнал много уроков по пути; если вы являетесь экспертом по JQuery, то Cheerio JS будет интуитивно понятен для вас, но для остальных разработчиков это неясная и эзотерическая библиотека. Просто посмотрите на документацию.
Будут использоваться следующие библиотеки:
Пример веб-сайта, с которого будет производиться парсинг, - страница goodreads (надеюсь, она останется доступной).
Перед продолжением вы должны изучить HTML-код сайта.
Парсинг
Для успешного парсинга сайта необходим только подмножество всей библиотеки Cheerio JS. Поэтому это не полный обзор всей библиотеки, а только тех ее частей, которые относятся к парсингу.
Загрузка
Прежде чем использовать Cheerio, необходимо загрузить HTML. Чтобы загрузить HTML в Cheerio, вы должны получить HTML-страницу веб-сайта, который вы хотите спарсить. Это можно сделать следующим образом:
data содержит HTML-страницу, чтобы загрузить ее в Cheerio, вы должны использовать:
$ - это экземпляр объекта CheerioAPI и также называется функцией запроса.
Запросы
Получение названия книги
Предположим, вы хотите получить название книги, родительским элементом названия является элемент h1 с идентификатором "bookTitle".
Для этого достаточно выполнить следующий код:
const bookTitle = document.querySelector("#bookTitle").textContent;
Этот метод работает в большинстве случаев, но в некоторых случаях может не сработать, поэтому вам придется обойти DOM до тех пор, пока не достигнете нужного узла.
В некоторых случаях это также может не сработать, поэтому вы можете использовать другие методы.
Получение изображения книги
Предположим теперь, что вы хотите получить URL изображения книги, книга находится внутри div с классом "bookCoverContainer" и само изображение является элементом img с идентификатором "coverImage".
Чтобы получить ссылку на изображение, вы можете использовать следующий код:
const coverImage = document.querySelector(".bookCoverContainer img#coverImage").src;
или просто
const coverImage = document.getElementById("coverImage").src;
Получение среднего количества звезд
Давайте сделаем это немного интереснее. Предположим, вы хотите получить средний рейтинг книги, все комментарии находятся внутри div с идентификатором "bookReviews", каждый комментарий имеет span с классом "staticStars" и атрибутом title, который может быть одним из следующих значений:
- "Очень плохо"
- "Плохо"
- "Средне"
- "Хорошо"
- "Отлично"
Чтобы получить среднее количество звезд для книги, вам нужно перебрать все комментарии и разделить сумму их звезд на количество комментариев.
Результат составил 4.03.
Вы можете узнать больше о запросах в документации по JQuery
Заключение
Вот все, что вам нужно, чтобы начать парсить с помощью Cheerio JS! Парсинг больше связан с креативностью и экспериментами, чем с хитростью алгоритмов (большинство функций уже написаны для вас), и возможности безграничны, так что идите и парсите.
Советы и заметки
-
Вы должны изменить User-Agent, чтобы выглядеть менее подозрительно.
-
Обход DOM с помощью функции children() подвержен ошибкам и выглядит неряшливо, поэтому вам следует написать функцию, которая разбирает текст в нужный вам элемент. Моя функция выглядит так:
Вы можете использовать ее так:
- Если вы щелкнете правой кнопкой мыши на любой странице и выберете "Просмотреть исходный код страницы", откроется новая вкладка с исходным кодом веб-сайта, который будет отображаться красиво.