通义千问与Cursor的热榜探险:捕捉最新话题的小确幸

153 阅读4分钟

引言

在这个信息像气球一样不断膨胀的时代,想要抓住最热门的话题,就像是在寻找藏在云朵里的彩虹——既神秘又充满惊喜。无论是为了保持对社会动态的敏感度,还是为了捕捉市场趋势,获取实时的热点话题都像是拥有了一把神奇的钥匙,能打开通往流行世界的门。

今天,我们将踏上一段特别的旅程,和我们的两位好朋友——通义千问大模型以及它的小伙伴Cursor一起,探索如何使用Node.js环境下的request-promisecheerio以及csv-writer库来构建一个小小的爬虫。这个小爬虫就像是一只勤劳的小蜜蜂,会从网络的大花园里采集最新的热榜花蜜,并将这些珍贵的信息酿成甜蜜的CSV文件,让我们可以随时品尝到最新鲜的话题甜点。

所以,准备好迎接这段奇妙的编程冒险了吗?让我们跟着通义千问Cursor的脚步,一起去发现那些隐藏在网络角落里的热门宝藏吧!如果你需要帮助或有任何疑问,别担心,我们一路上都会有温暖的阳光和清新的微风相伴。😊

准备工作

Step 0:

先配置好Cursor与通义千问的环境

这篇文章有详细解说~ juejin.cn/post/744624…

Step 0.5:

输入一段prompt

请帮我编写一个Node程序,去爬取微博的热榜。 #要求:

  1. 使用request-promise 和 cheerio
  2. 目标网站: @tophub.today/n/KqndgxeLl…
  3. 爬取表格中热榜的排名、标题、热度、链接、并保存到csv文件中 请一步步思考,你可以打开目标网站分析其网页结构,并编写代码。
image.png

按完回车后,就会出现下面的步骤,只需要点击run就能自动在终端运行下面的命令。 点击apply就能开始爬取热榜。

Step 1: Set Up Your Node.js Project

首先,创建一个新的目录用于你的项目,并使用npm进行初始化:

mkdir weibo-hot-topics-scraper
cd weibo-hot-topics-scraper
npm init -y

Step 2: Install Required Packages

其次,我们需要确保安装了所有必需的库。这可以通过运行以下命令来完成:

npm install request-promise cheerio csv-writer

Step 3: Import these libraries

然后,在代码中引入这些库:

const request = require('request-promise'); // 发送HTTP请求并获取HTML字符串
const cheerio = require('cheerio'); // 解析HTML字符串
const createCsvWriter = require('csv-writer').createObjectCsvWriter; // 创建CSV文件写入器

开始爬取

接下来,我们要指定要爬取的目标网页URL,并发送请求获取页面内容。我们以微博热搜榜为例~:

// 定义常量 URL
const HOT_URL = 'https://tophub.today/n/KqndgxeLl9'; // 热门话题列表页地址

// 发送HTTP GET请求获取页面HTML
request(HOT_URL)
    .then(html => {
        // 请求成功 接收到HTML 开始解析
        const $ = cheerio.load(html); // 加载HTML到Cheerio环境中
        const hotList = []; // 用于存储解析后的热榜条目
        
        // 遍历每一个热榜条目
        $('.jc tbody tr').each((index, element) => {
            // 获取每个条目的排名、标题、热度及链接
            const rank = $(element).find('td:nth-child(1)').text().trim();
            const title = $(element).find('td:nth-child(2)').text().trim();
            const heat = $(element).find('td:nth-child(3)').text().trim();
            const link = $(element).find('td:nth-child(2) a').attr('href') || ''; // 如果没有链接则为空字符串
            
            // 将信息添加到hotList数组中
            hotList.push({rank, title, heat, link});
        });
        
        // 创建CSV写入器并在所有条目都处理完毕后再写入CSV文件
        const csvWriter = createCsvWriter({
            path: 'hot_list.csv',
            header: [
                {id: 'rank', title: '排序'},
                {id: 'title', title: '标题'},
                {id: 'heat', title: '热度'},
                {id: 'link', title: '链接'}
            ]
        });

        // 写入CSV文件
        csvWriter.writeRecords(hotList)
            .then(() => console.log('CSV file has been saved.'))
            .catch(err => console.error('Error writing CSV:', err));
    })
    .catch(err => console.error('Error fetching page:', err));

运行结果:

image.png

代码解释

  • request-promise:这是一个基于Promise的HTTP客户端,它使得我们可以轻松地发出HTTP请求,并且可以链式调用.then()方法来处理响应。
  • cheerio:模拟浏览器的行为加载HTML文档,提供了类似jQuery的选择器语法来查询DOM元素。通过cheerio.load()函数加载HTML字符串,之后就可以使用$作为查询器了。
  • csv-writer:用来创建CSV文件写入器,定义输出文件路径和表头信息。writeRecords()方法接受一个记录数组,并将其逐行写入CSV文件中。

请注意,在遍历表格行时,原本的代码尝试在每次迭代中创建CSV写入器,这是不必要的,也是低效的。正确的做法是在所有条目都被处理完之后再创建CSV写入器,并一次性写入所有记录。

结语

在这段旅程中,我们不仅学会了用Node.js工具编织出一个简单的小爬虫,还感受到了通义千问Cursor的智慧与帮助,就像有了一对编程小助手,让解决问题变得轻松有趣。

希望这次温馨的经历能点燃你对编程和技术的热情,鼓励你继续探索更多奇妙的应用场景。编程的世界充满了无限可能,愿你带着这份好奇心,勇敢地去发现更多精彩!

如果你需要更多帮助,记得通义千问Cursor随时在你身边哦!🌟😊

继续前行,发现更多编程乐趣吧!✨