CoderCastrov logo
CoderCastrov
Node.js

Парсинг веб-страниц с использованием Node.js

Парсинг веб-страниц с использованием Node.js
просмотров
2 мин чтение
#Node.js
Table Of Content

    В этой статье рассматривается парсинг данных с различных веб-страниц, также известный как веб-скрапинг. Вместо извлечения данных из API (интерфейса прикладного программирования) мы будем извлекать данные непосредственно с веб-страницы в виде HTML-тегов.

    В этой статье будет приведен пример извлечения информации о фондовых инвестициях с веб-сайта https://codequiz.azurewebsites.net/.

    Для парсинга данных мы будем использовать два пакета: cheerio и zombie.

    Cheerio - это пакет, который позволяет работать с HTML с помощью jQuery.

    Zombie - это пакет, который позволяет открывать браузер и выполнять различные действия в браузере.

    Прежде чем начать использовать пакеты, необходимо установить их с помощью следующих команд:

    npm install zombie --save-dev
    npm install cheerio

    Далее мы объявляем require для пакетов, которые будем использовать:

    const Zombie = require('zombie');
    const cheerio = require('cheerio');

    Далее приведен пример использования:

    const browser = new Zombie();
    browser.visit('https://codequiz.azurewebsites.net/', () => {
      console.log(browser.html());
    });

    Из вывода консоли видно, что мы можем получить доступ к веб-странице, но пока не получили нужные данные. Чтобы получить данные, нам нужно нажать кнопку Accept, чтобы получить доступ к данным о фондовых инвестициях. Для этого мы используем метод click() браузера:

    browser.click("input[type='button'][value='Accept']");

    Затем мы можем вывести HTML-код с помощью console.log(browser.html()). Мы увидим, что данные о фондовых инвестициях теперь доступны в виде HTML:

    const $ = cheerio.load(browser.html());
    const listItem = $("body > table > tbody > tr");

    В переменной listItem у нас будет список всех элементов tr. На веб-сайте есть 5 строк. Затем мы можем использовать цикл each() для обхода каждого элемента и найти все элементы td в каждой строке:

    listItem.each((idx, el) => {
      const tds = $(el).find("td");
    });

    Теперь мы можем получить доступ к каждому td по индексу и сохранить данные в виде объекта, а затем добавить его в массив для удобства использования:

    const scrapedData = [];
    listItem.each((idx, el) => {
      const tds = $(el).find("td");
      const data = {
        name: $(tds[0]).text(),
        nav: $(tds[1]).text(),
        bid: $(tds[2]).text(),
        offer: $(tds[3]).text(),
        change: $(tds[4]).text(),
      };
      scrapedData.push(data);
    });

    Теперь мы можем использовать полученные данные по своему усмотрению. Дополнительный код доступен на https://github.com/chalermchai-wp/nodejs-scraper.

    Если у вас возникнут вопросы, не стесняйтесь задавать их.