Как использовать Puppeteer с NestJS для парсинга рейтинга
В этом посте покажу, как с помощью библиотеки Puppeteer спарсить рейтинг с сайта с использованием фреймворка NestJS.
📌 Шаг 1: Установка зависимостей
Для начала установим необходимые пакеты:
npm install puppeteer npm install @nestjs/axios npm install --save-dev @types/puppeteer
📌 Шаг 2: Создаем сервис для парсинга
Теперь создадим сервис в NestJS, который будет парсить данные с сайта. В нашем примере мы будем извлекать рейтинг из элемента с определенным классом.
rating.service.ts import { Injectable } from '@nestjs/common'; import * as puppeteer from 'puppeteer'; @Injectable() export class RatingService { async getRating(url: string): Promise<number> { const browser = await puppeteer.launch({ headless: true }); const page = await browser.newPage(); await page.goto(url, { waitUntil: 'domcontentloaded' }); // Пример: извлекаем рейтинг с элемента с классом '.rating' const rating = await page.$eval('.rating', (el) => { return parseFloat(el.textContent.trim()); }); await browser.close(); return rating; } }
📌 Шаг 3: Создаем контроллер для API
Теперь создадим контроллер, который будет обрабатывать запросы и отдавать рейтинг в формате JSON.
rating.controller.ts import { Controller, Get, Query } from '@nestjs/common'; import { RatingService } from './rating.service'; @Controller('rating') export class RatingController { constructor(private readonly ratingService: RatingService) {} @Get() async getRating(@Query('url') url: string) { const rating = await this.ratingService.getRating(url); return { rating }; } }
📌 Шаг 4: Добавляем сервис и контроллер в модуль
Не забываем добавить сервис и контроллер в наш модуль:
app.module.ts import { Module } from '@nestjs/common'; import { RatingService } from './rating.service'; import { RatingController } from './rating.controller'; @Module({ imports: [], controllers: [RatingController], providers: [RatingService], }) export class AppModule {}
npm run start
Отправляем запрос к API, передав URL сайта:
GET /rating?url=https://example.com
{ "rating": 4.5 }
🎉 Поздравляем! Теперь у вас есть сервис, который парсит рейтинг с сайтов с помощью Puppeteer и NestJS!