引言
在这个信息像气球一样不断膨胀的时代,想要抓住最热门的话题,就像是在寻找藏在云朵里的彩虹——既神秘又充满惊喜。无论是为了保持对社会动态的敏感度,还是为了捕捉市场趋势,获取实时的热点话题都像是拥有了一把神奇的钥匙,能打开通往流行世界的门。
今天,我们将踏上一段特别的旅程,和我们的两位好朋友——通义千问
大模型以及它的小伙伴Cursor
一起,探索如何使用Node.js
环境下的request-promise
、cheerio
以及csv-writer
库来构建一个小小的爬虫。这个小爬虫就像是一只勤劳的小蜜蜂,会从网络的大花园里采集最新的热榜花蜜,并将这些珍贵的信息酿成甜蜜的CSV
文件,让我们可以随时品尝到最新鲜的话题甜点。
所以,准备好迎接这段奇妙的编程冒险了吗?让我们跟着通义千问
和Cursor
的脚步,一起去发现那些隐藏在网络角落里的热门宝藏吧!如果你需要帮助或有任何疑问,别担心,我们一路上都会有温暖的阳光和清新的微风相伴。😊
准备工作
Step 0:
先配置好Cursor与通义千问的环境
这篇文章有详细解说~ juejin.cn/post/744624…
Step 0.5:
输入一段prompt
:
请帮我编写一个Node程序,去爬取微博的热榜。 #要求:
- 使用request-promise 和 cheerio
- 目标网站: @tophub.today/n/KqndgxeLl…
- 爬取表格中热榜的排名、标题、热度、链接、并保存到csv文件中 请一步步思考,你可以打开目标网站分析其网页结构,并编写代码。
按完回车后,就会出现下面的步骤,只需要点击
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));
运行结果:
代码解释
request-promise
:这是一个基于Promise的HTTP客户端,它使得我们可以轻松地发出HTTP请求,并且可以链式调用.then()
方法来处理响应。cheerio
:模拟浏览器的行为加载HTML文档,提供了类似jQuery
的选择器语法来查询DOM
元素。通过cheerio.load()
函数加载HTML
字符串,之后就可以使用$
作为查询器了。csv-writer
:用来创建CSV
文件写入器,定义输出文件路径和表头信息。writeRecords()
方法接受一个记录数组,并将其逐行写入CSV
文件中。
请注意,在遍历表格行时,原本的代码尝试在每次迭代中创建CSV
写入器,这是不必要的,也是低效的。正确的做法是在所有条目都被处理完之后再创建CSV
写入器,并一次性写入所有记录。
结语
在这段旅程中,我们不仅学会了用Node.js
工具编织出一个简单的小爬虫,还感受到了通义千问
和Cursor
的智慧与帮助,就像有了一对编程小助手,让解决问题变得轻松有趣。
希望这次温馨的经历能点燃你对编程和技术的热情,鼓励你继续探索更多奇妙的应用场景。编程的世界充满了无限可能,愿你带着这份好奇心,勇敢地去发现更多精彩!
如果你需要更多帮助,记得通义千问
和Cursor
随时在你身边哦!🌟😊
继续前行,发现更多编程乐趣吧!✨