让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 天前
Labelme安装及使用说明教程
vscode·数据集·cursor·labelme·数据标注
Sestid2 天前
前端AI编程使用技巧(后续会更新cursor和claude code for vscode)
前端·vscode·ai编程·claude·cursor
倔强的石头_3 天前
突破 Cursor 模型限制:低成本接入 GLM-5 与第三方大模型实践指南
cursor
AmyLin_20015 天前
MiniMax Skills 技能体系分析
cursor·codex·minimax·claude code·skills·minimax skills
装不满的克莱因瓶6 天前
Cursor中agent、plan、ask三种模式区别于对比
人工智能·ai·大模型·ai编程·cursor
程序员爱德华11 天前
AI Coding 使用教程
copilot·cursor·trae·claude code·ai coding
Irene199112 天前
拥抱 AI 原生 IDE,Cursor 我来了
cursor
Filwaod12 天前
Cursor+IDEA开发问题
java·idea·cursor
shughui14 天前
Cursor下载安装以及和VSCode的区别(附安装包)
ide·vscode·ai·编辑器·cursor