Парсинг данных с использованием Node.js (Express + Cheerio)
Table Of Content
Парсинг данных - это процесс извлечения данных с веб-сайта. Один из примеров - копирование списка контактов с веб-каталога.
Для парсинга данных здесь мы будем использовать технологию Node.js с фреймворком Express.js и библиотекой Cheerio. Перед тем, как начать, давайте познакомимся с Express.js и Cheerio.
Express.js - это один из фреймворков на языке JavaScript, который разработан гибким и минималистичным для создания серверных приложений. Этот фреймворк, разработанный на основе Node.js, может облегчить создание приложений с серверной стороны. Кроме того, Express.js является основной библиотекой фреймворка Node.js.
Cheerio - это быстрая, гибкая и элегантная библиотека Node.js для парсинга и манипулирования HTML и XML (цитата с официального сайта).
Вот шаги для создания парсера, но перед началом убедитесь, что вы установили Node.js на свой компьютер.
npm init -y
- Установите фреймворк Express.js и библиотеку Cheerio
npm i express cheerio
-
Откройте папку проекта в вашем редакторе кода (я использую Visual Studio Code)
-
Создайте файл fetching.js и вставьте следующий код
const axios = require('axios')
const BASE_URL= `https://www.detik.com/`
const getData = async (param) => {
try {
let res = await axios.get(BASE_URL+param)
return res.data
} catch(e) {
return res.response
}
}
module.exports = { getData }
Вышеуказанный код используется для доступа к веб-сайту, который мы собираемся парсить. Здесь мы приводим пример парсинга веб-сайта detik.com.
- Создайте файл utils.js и вставьте следующий код
const cheerio = require('cheerio');
const { getData } = require("./fetching");
const brokeDataSearch = async (param) => {
const res = await getData(param);
const $ = cheerio.load(res);
const data = $('.list-berita > article > a')
let result = []
data.map((i, el) => {
let url = $(el)
let title = $(`.title`)
let content = $(`.box_text > p`)
result.push({
url: url[0].attribs.href,
title: title[i].children[0].data,
content: content[i].children[0].data
})
})
return result
};
module.exports = { brokeDataSearch }
Вышеуказанный код является основой нашего парсера данных и предназначен для разбора данных, которые мы собираемся извлечь с веб-сайта. Здесь мы просто извлекаем URL, заголовок новости и содержимое новости. URL извлекается из тега <a>
, который находится внутри тега div с классом "list-berita" и внутри тега article, заголовок извлекается из тега div с классом "title", а содержимое извлекается из тега <p>
, который находится внутри тега div с классом "box_text".
- Создайте файл index.js и вставьте следующий код
const express = require('express')
const app = express()
const port = 7000
const util = require('./utils')
app.get('/', async (req, res) => {
res.send(`Latihan Scraping Data dengan Node JS`)
})
app.get(`/search`, async (req, res) => {
const result = await util.brokeDataSearch(`search/searchall?query=${req.query.keyword}`)
res.status(200).send(result)
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
- Запустите программу с помощью команды
node index.js
- Проверьте приложение, перейдя по ссылке
http://localhost:7000/search?keyword=kriminal
Вот результат
Полный исходный код доступен здесь.