前言
在数字化浪潮中,微博热搜作为信息传播的关键节点,其数据价值不言而喻。
无论是用于舆情分析、内容创作还是商业决策或者是个人网站的展示,实时掌握这些微博热搜动态都至关重要。
今天,我将分享如何借助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生成的代码结构,代码都是非常简洁,扩展性还是很高的。
这种实现方式不仅代码结构清晰,便于维护和扩展,而且利用了框架提供的强大功能,如模块化、依赖注入、定时任务等,使整个爬取流程更加稳定和高效。
这种方法适用于需要定时获取动态数据的多种场景,为数据分析和业务决策提供了有力支持。
