December 17, 2024

Как использовать 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 {}

📌 Шаг 5: Запуск проекта

Теперь запускаем приложение:

npm run start

🔗 Шаг 6: Тестируем

Отправляем запрос к API, передав URL сайта:

GET /rating?url=https://example.com

В ответе получим рейтинг:

{
  "rating": 4.5
}

🎉 Поздравляем! Теперь у вас есть сервис, который парсит рейтинг с сайтов с помощью Puppeteer и NestJS!