让cursor使用Nest.js从零到实现定时爬取微博热搜

前言

在数字化浪潮中,微博热搜作为信息传播的关键节点,其数据价值不言而喻。

无论是用于舆情分析、内容创作还是商业决策或者是个人网站的展示,实时掌握这些微博热搜动态都至关重要。

今天,我将分享如何借助cursor+ Nest.js 框架,按照规范的方法实现微博热搜的定时爬取。

微博热搜数据接口解析

微博热搜数据通常通过其开放接口以 JSON 格式返回。

这些接口提供了热搜词、热度值、链接等关键信息,是后续分析与展示的数据基石。

Nest.js 规范实现爬取逻辑

项目结构搭建

按照 Nest.js 的模块化规范,cursor先帮我们创建一个nest项目,然后使用nest命令去创建相关文件,下面是整体的项目结构

1、创建实体类存到数据库

2、连接数据库

创建一个独立的模块 hot-search.module.ts,用于封装微博热搜相关功能。在该模块中,引入必要的提供者和服务。

同时,创建一个服务类 hot-search.service.ts,专门处理与微博热搜数据交互的逻辑。

服务类实现

在服务类中,使用 axios 进行 HTTP 请求,模拟浏览器行为以获取微博热搜数据。以下是核心代码片段:

typescript 复制代码
import { Injectable, Logger } from '@nestjs/common';
import axios from 'axios';

@Injectable()
export class HotSearchService {
    private readonly logger = new Logger(HotSearchService.name);
    private url = 'https://weibo.com/ajax/side/hotSearch'; // 微博热搜接口地址
    private headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
    };

    async fetchHotSearch(): Promise<any> {
        try {
            const response = await axios.get(this.url, { headers: this.headers });
            return response.data;
        } catch (error) {
            this.logger.error(`Failed to fetch hot search data: ${error.message}`);
            return null;
        }
    }
}

定时任务实现

利用 Nest.js 的 @Cron() 装饰器,可以轻松实现定时爬取功能。在服务类中添加以下代码,实现每隔一段时间自动爬取微博热搜数据:

typescript 复制代码
import { Cron } from '@nestjs/schedule';

// 在 HotSearchService 类中
@Cron('0 0-59/1 * * * *') // 每分钟执行一次
async handleCron() {
    this.logger.log('Start fetching hot search data...');
    const data = await this.fetchHotSearch();
    if (data) {
        // 在此处处理获取到的数据,如存储到数据库或进行其他操作
        this.logger.log('Hot search data fetched successfully');
    }
}

错误处理与日志记录

在代码中,使用了 try-catch 结构来捕获请求过程中的异常,并通过 Logger 类记录操作日志。这样可以在出现问题时快速定位,并跟踪爬取任务的执行情况。

控制器与路由

创建一个控制器 hot-search.controller.ts,定义路由以暴露相关接口:

typescript 复制代码
import { Controller, Get } from '@nestjs/common';
import { HotSearchService } from './hot-search.service';

@Controller('hot-search')
export class HotSearchController {
    constructor(private readonly hotSearchService: HotSearchService) {}

    @Get()
    async getHotSearch() {
        return await this.hotSearchService.fetchHotSearch();
    }
}

也写一个接口,支持手动触发,这样就不用每次都要整点才会触发

最终的效果

总结

通过cursor帮我们从0实现了一个微博热搜,使用 Nest.js 框架,我们可以按照规范的方式实现微博热搜的定时爬取,cursor生成的代码结构,代码都是非常简洁,扩展性还是很高的。

这种实现方式不仅代码结构清晰,便于维护和扩展,而且利用了框架提供的强大功能,如模块化、依赖注入、定时任务等,使整个爬取流程更加稳定和高效。

这种方法适用于需要定时获取动态数据的多种场景,为数据分析和业务决策提供了有力支持。

相关推荐
飞哥数智坊1 天前
AI编程实战:Cursor 1.0 上手实测,刀更锋利马更快
人工智能·cursor
yaocheng的ai分身1 天前
Cursor 发布了1.0,第一个整数版号
cursor
新智元1 天前
Cursor 1.0首个大版本来袭!自动捉bug,秒改屎山代码,AI编程分水岭已至
人工智能·cursor
Captaincc2 天前
Cursor 1.0 更新解析:意外升级,亮点与槽点并存
ai编程·cursor
五月君2 天前
Cursor 正式发布 1.0 版本
cursor
斯普信专业组2 天前
Cursor使用最佳实践总结
ai·cursor
一_个前端2 天前
Cursor 免费使用(无限邮箱)
cursor
杭州胖敬亭3 天前
Trae终於有付费版本了,一分价钱一分货
前端·cursor·trae