Як скрапити вебсторінки за допомогою Cheerio в Node.js
Here, I’ll show you how to scrape data from websites using Cheerio in Node.js. We’ll go step-by-step through the process: setting up your project, making HTTP requests, and extracting the necessary data. By the end of this guide, you’ll know how to collect and save data in a clean format, like JSON, making it easy to use for your projects. Ready to dive in? Let’s get started!
Що таке Cheerio?
Cheerio is a fast and lightweight JavaScript library built on top of htmlparser2. It allows you to work with HTML in a very similar way to jQuery, making it easy to select, manipulate, and extract data from HTML documents. Cheerio is designed for use in server-side environments like Node.js, which makes it a perfect choice for web scraping tasks.
Since Cheerio is built for Node.js, it’s not intended to render or simulate a browser, like Puppeteer or Playwright. Instead, it operates directly on the HTML markup of a page, allowing you to parse and interact with it efficiently.
Cheerio надає синтаксис, подібний до jQuery, який легко зрозуміти, тому це чудовий інструмент як для початківців, так і для досвідчених розробників. Не знаєте, що обрати: Cheerio чи BeautifulSoup? Перегляньте нашу статтю про Cheerio проти BeautifulSoup.
Skip Manual Scraping
Якщо ви хочете обійти ручний вебскрапінг, я підготував детальні списки найкращі сайти з наборами даних і найкращі інструменти для вебскрапінгу. Тепер продовжімо наш гайд!
Prerequisites
Перш ніж почати, на вашому комп’ютері потрібно налаштувати кілька речей:
- Node.js: Середовище виконання JavaScript, у якому працюватиме наш код для вебскрапінгу.
- npm (Node Package Manager): Це буде використано для встановлення бібліотек, потрібних для проєкту.
- Редактор коду: Use Visual Studio Code or Sublime Text щоб писати та запускати свій код.
If you’re not sure whether you have Node.js and npm installed, you can check by opening your terminal (or command prompt) and typing:
node -v
npm -v
If these commands return version numbers, you’re good to go! Otherwise, download and install Node.js from nodejs.org.
Налаштування вашого проєкту
Let’s begin by setting up a simple Node.js project where we will install Cheerio and Axios (a popular HTTP client for making requests). Follow these steps to set up your project:
Крок 1: Створіть каталог проєкту
Почніть зі створення папки для вашого проєкту. Відкрийте термінал і виконайте таку команду, щоб створити новий каталог:
mkdir cheerio-web-scraping
cd cheerio-web-scraping
Це створить нову папку під назвою cheerio-web-scraping і перемістить вас у неї.
Step 2: Initialize a Node.js Project
Next, initialize a new Node.js project. This will create a package.json file to manage your project’s dependencies:
npm init -y
The -y flag automatically answers “yes” to all the prompts, creating the package.json file with default values.
Крок 3: Встановіть залежності
Тепер встановімо Cheerio та Axios. У терміналі виконайте:
npm install cheerio axios
- Cheerio це бібліотека, яку ми використаємо для парсингу та обробки HTML.
- Axios це HTTP-клієнт, який спрощує надсилання запитів до вебсайтів і отримання їхнього HTML.
Крок 4: Створіть свій перший скрипт
Create a new file in the project folder named index.js. This will be the main file where you write your scraping code.
Тепер, коли ми налаштували наш проєкт, настав час написати скрипт для вебскрапінгу вебсторінок!
Вебскрапінг вебсторінки за допомогою Cheerio
Let’s start by scraping a simple webpage. For this example, we’ll scrape an e-commerce website and collect product details like the image, name, and price. But before we begin scraping, let’s inspect the page’s structure.
Перевірка сторінки
У цьому прикладі ми зберемо дані про товари з демо-інтернет-магазину. Спочатку відкрийте в браузері сайт, який ви хочете скрапити, і скористайтеся інструментами розробника вашого браузера (клацніть сторінку правою кнопкою миші та виберіть «Inspect» у Chrome або Firefox), щоб дослідити структуру HTML.
Шукайте такі шаблони, як назви класів або HTML-елементи, що містять дані, які ви хочете витягнути. У цьому випадку припустімо, що ми хочемо зібрати такі дані для кожного продукту:
- URL зображення товару
- Назва продукту
- Ціна продукту
Написання вебскрапера
With the page inspected and the structure identified, it’s time to write the scraping code. Open your index.js file and add the following code:
const axios = require('axios');
const cheerio = require('cheerio');
const fs = require('fs');
// URL of the website we want to scrape
const targetURL = 'https://www.example.com/products';
// Function to scrape product data
const getProducts = ($) => {
// Select all product items on the page
const products = $('.product-item');
const productData = [];
// Loop through each product item
products.each((індекс, елемент) => {
const product = {};
// Extract the product image URL
product.img = $(element).find('img').attr('src');
// Extract the product name
product.name = $(element).find('.product-name').text();
// Extract the product price
product.price = $(element).find('.product-price').text();
// Push the product data into the array
productData.push(product);
});
// Save the scraped data to a JSON file
fs.writeFile('products.json', JSON.stringify(productData, null, 2), (err) => {
if (err) {
console.error(Помилка запису даних у файл:, err);
return;
}
console.log('Data written to products.json');
});
};
// Fetch the HTML of the page using Axios
axios.get(targetURL)
.then(response => {
const $ = cheerio.load(response.data);
getProducts($); // Call the function to scrape the products
})
.catch(error => {
console.error('Error fetching the page:', error);
});
Як працює цей код
Надсилання HTTP-запиту:
- Ми використовуємо Axios, щоб надіслати GET-запит до вебсторінки, яку хочемо вебскрапити (targetURL).
- Дані відповіді — це HTML-вміст сторінки.
Розбір HTML за допомогою Cheerio:
We load the HTML response using Cheerio (cheerio.load(response.data)), which gives us a jQuery-like interface to interact with the HTML.
Extracting Data:
- Ми використовуємо селектори Cheerio ($(‘.product-item’), $(element).find(‘img’), тощо), щоб знаходити конкретні елементи на сторінці.
- Для кожного товару ми витягуємо URL зображення, назву товару та ціну.
Збереження даних:
The data is stored in an array (productData), and once all products are scraped, we write the data to a JSON file using fs.writeFile.
Запуск вебскрапера
Щоб запустити вебскрапер, відкрийте термінал, перейдіть до папки проєкту та виконайте:
node index.js
After the script completes, a file called products.json will be created in your project folder, containing the scraped data.
Обробка помилок і крайових випадків
Під час вебскрапінгу важливо обробляти потенційні помилки. Наприклад, вебсторінка, яку ви скрапите, може не завантажитися, або структура HTML може змінитися. Ось кілька підходів до обробки цих проблем:
Перевірте наявність HTTP-помилок: Always handle HTTP errors (e.g., 404 or 500 errors) gracefully. Axios has a built-in .catch() method to handle errors.
Missing Data: Не всі елементи можуть бути присутні в кожному продукті. Щоб обробити відсутні дані, можна перевірити, чи існує елемент, перш ніж намагатися отримати його значення:
product.img = $(element).find('img').attr('src') || 'default-image.jpg';
Обмеження частоти та блокування: Деякі вебсайти можуть блокувати ботів для вебскрапінгу. Щоб уникнути цього, ви можете:
- Додавайте затримки між запитами.
- Використовуйте сервіси ротації проксі.
- Respect the website’s robots.txt file, which indicates the site’s scraping policy.
Conclusion
And there you have it! Now you know how to scrape web pages using Cheerio in Node.js. We covered everything from setting up your project and making HTTP requests to parsing the HTML and saving the data in a clean JSON file.
Вебскрапінг — надзвичайно корисний інструмент, але завжди пам’ятайте про дотримання умов використання вебсайту. Деякі сайти не дозволяють вебскрапінг, а інші можуть застосовувати антибот-захист. Тож переконайтеся, що ваш вебскрапер готовий до таких викликів. З цими базовими знаннями ви можете почати збирати дані з будь-якого вебсайту, які вам потрібні. Успішного вебскрапінгу та удачі у ваших проєктах!

