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