CoderCastrov logo
CoderCastrov
Парсер

Парсинг данных с использованием Node.js (Express + Cheerio)

Парсинг данных с использованием Node.js (Express + Cheerio)
просмотров
2 мин чтение
#Парсер
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
    1. Установите фреймворк Express.js и библиотеку Cheerio
    npm i express cheerio
    1. Откройте папку проекта в вашем редакторе кода (я использую Visual Studio Code)

    2. Создайте файл 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.

    1. Создайте файл 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".

    1. Создайте файл 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}`)
    })
    1. Запустите программу с помощью команды
    node index.js
    1. Проверьте приложение, перейдя по ссылке
    http://localhost:7000/search?keyword=kriminal

    Вот результат

    Полный исходный код доступен здесь.