Если веб-сайт не может предоставить хороший API, лучше всего очистить его содержимое. Cheerio и Express.js помогут вам в этом.
Веб-скрапинг — это метод, который позволяет получать данные с определенного веб-сайта. Веб-сайты используют HTML для описания своего контента. Если HTML чистый и семантический, его легко использовать для поиска полезных данных.
Обычно вы будете использовать веб-скребок для получения и мониторинга данных, а также для отслеживания будущих изменений в них.
Концепции jQuery, которые стоит знать перед использованием Cheerio
jQuery — один из самых популярных существующих пакетов JavaScript. Это облегчает работу с Объектная модель документа (DOM), обрабатывать события, анимацию и многое другое. Cheerio — это пакет для парсинга веб-страниц, созданный на основе jQuery и использующий тот же синтаксис и API, что упрощает анализ документов HTML или XML.
Прежде чем вы научитесь использовать Cheerio, важно знать, как выбирать элементы HTML с помощью jQuery. К счастью, jQuery поддерживает большинство селекторов CSS3, что упрощает захват элементов из DOM. Взгляните на следующий код:
$("#container");
В приведенном выше блоке кода jQuery выбирает элементы с идентификатор из "контейнера". Аналогичная реализация с использованием обычного старого JavaScript будет выглядеть примерно так:
document.querySelectorAll("#container");
Сравнивая последние два блока кода, вы можете видеть, что первый блок кода читается намного легче, чем второй. В этом прелесть jQuery.
jQuery также имеет полезные методы, такие как текст(), HTML()и многое другое, позволяющее управлять элементами HTML. Есть несколько методов, которые вы можете использовать для обхода DOM, например родитель(), братья и сестры(), предыдущий(), и следующий().
каждый() метод в jQuery очень популярен во многих проектах Cheerio. Это позволяет перебирать объекты и массивы. Синтаксис для каждый() метод выглядит так:
$().each(<arrayorobject>, callback)
В приведенном выше блоке кода перезвонить запускается для каждой итерации аргумента массива или объекта.
Загрузка HTML с помощью Cheerio
Чтобы начать синтаксический анализ данных HTML или XML с помощью Cheerio, вы можете использовать cheerio.load() метод. Взгляните на этот пример:
const $ = cheerio.load('Hello, world!
');
console.log($('h1').text())
Этот блок кода использует jQuery текст() метод извлекает текстовое содержимое h1 элемент. Полный синтаксис для нагрузка() метод выглядит так:
load(content, options, mode)
содержание Параметр относится к фактическим данным HTML или XML, которые вы передаете нагрузка() метод. параметры является необязательным объектом, который может изменить поведение метода. По умолчанию нагрузка() метод вводит HTML, голова, и тело элементы, если они отсутствуют. Если вы хотите остановить это поведение, убедитесь, что вы установили режим к ложному.
Сбор хакерских новостей с помощью Cheerio
Код, используемый в этом проекте, доступен в Репозиторий GitHub и вы можете использовать его бесплатно по лицензии MIT.
Пришло время объединить все, что вы узнали, и создать простой парсер. Hacker News — популярный веб-сайт для предпринимателей и новаторов. Это также идеальный веб-сайт для использования ваших навыков просмотра веб-страниц, потому что он быстро загружается, имеет очень простой интерфейс и не показывает никакой рекламы.
Убедитесь, что у вас есть Node.js и Менеджер пакетов узлов работает на вашей машине. Создайте пустую папку, затем пакет.json файл и добавьте в файл следующий JSON:
{
"name": "web-scraper",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "nodemon index.js"
},
"author": "",
"license": "MIT",
"dependencies": {
"cheerio": "^1.0.0-rc.12",
"express": "^4.18.2"
},
"devDependencies": {
"nodemon": "^3.0.1"
}
}
После этого откройте терминал и выполните:
npm i
Это должно установить необходимые зависимости, необходимые для сборки скребка. Эти пакеты включают Cheerio для анализа HTML, ExpressJS для создания сервера и — как зависимость разработки —Nodemon, утилита, которая прослушивает изменения в проекте и автоматически перезапустит сервер.
Настройка вещей и создание необходимых функций
Создать index.js файл и в этом файле создайте постоянную переменную с именем «ПОРТ». Набор ПОРТ до 5500 (или любое другое число, которое вы выберете), затем импортируйте пакеты Cheerio и Express соответственно.
const PORT = 5500;
const cheerio = require("cheerio");
const express = require("express");
const app = express();
Затем определите три переменные: URL, HTML, и готовая страница. Набор URL на URL-адрес хакерских новостей.
const url = 'https://news.ycombinator.com';
let html;
let finishedPage;
Теперь создайте функцию с именем получитьзаголовок() который возвращает некоторый HTML-код, который должен отображать браузер.
functiongetHeader(){
return`
"display: flex; flex-direction: column; align-items: center;">
"text-transform: capitalize">Scraper News</h1>
"display: flex; gap: 10px; align-items: center;">
"/" id="news" onClick='showLoading()'>Home</a>
"/best" id="best" onClick='showLoading()'>Best</a>
"/newest" id="newest" onClick='showLoading()'>Newest</a>
"/ask" id="ask" onClick='showLoading()'>Ask</a>
"/jobs" id="jobs" onClick='showLoading()'>Jobs</a>
</div>
class="loading" style="display: none;">Loading...</p>
</div>
`}
Создать другую функцию получить скрипт() который возвращает некоторый JavaScript для запуска браузера. Убедитесь, что вы передаете переменную тип в качестве аргумента, когда вы это называете.
functiongetScript(type){
return`