让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 小时前
我为什么最终还是回归了Cursor
ai编程·claude·cursor
jserTang4 小时前
Cursor Plan Mode:AI 终于知道先想后做了
前端·后端·cursor
观默2 天前
写代码前先写文档?这才是把AI用对姿势
cursor
加油_Yeah3 天前
cursor使用之没有正常的编辑器中的运行箭头
编辑器·cursor
小小毛毛虫~6 天前
使用Cursor遇到的问题(一):cursor使用conda虚拟环境
python·conda·cursor
飞哥数智坊7 天前
GLM-4.6 + Cursor 实战首秀:国产大模型高效优化现有模块
ai编程·cursor·chatglm (智谱)
程序视点9 天前
告别Cursor低效编程!Cursor高手都在用的7个沟通秘诀,最后一个太关键
aigc·ai编程·cursor
阑梦清川9 天前
借助cursor实现海外站的搭建流程
cursor
SamDeepThinking11 天前
有了 AI IDE 之后,为什么还还要 CLI?
后端·ai编程·cursor
十字路口的火丁11 天前
如何处理 cursor 和 vscode 中 command+k 快捷键冲突问题?
cursor