使用Puppeteer爬取网页时无法将表格数据写入JSON文件
问题分析与解决方案
你的代码中fs.writeFile无法正常写入JSON文件,核心有两个问题:
1. 未将数据序列化为JSON字符串
fs.writeFile要求写入的内容是字符串类型,但你直接传递了对象数组data,此时Node.js会将对象转换为默认的[object Object]字符串,而非预期的JSON格式。
2. 未等待异步写入完成就关闭浏览器
fs.writeFile是异步操作,你没有等待它完成就调用了await browser.close(),可能导致写入操作还没结束,程序就已经退出,文件写入不完整或失败。
修改后的关键代码片段
将原来的fs.writeFile('data.json', data);替换为以下代码:
console.log(JSON.stringify(data)); try { // 序列化数据为格式化后的JSON字符串,并等待写入完成 await fs.promises.writeFile('data.json', JSON.stringify(data, null, 2)); console.log('数据已成功写入data.json'); } catch (err) { console.error('写入文件失败:', err); } await browser.close();
修改说明
- 使用
fs.promises.writeFile:这是fs.writeFile的Promise版本,配合await可以确保写入操作完成后再执行后续代码,避免异步操作未完成就退出。 JSON.stringify(data, null, 2):和你console.log中使用的逻辑一致,将对象序列化为JSON字符串,null和2用于格式化输出,让JSON文件更易读。- 错误捕获:添加
try/catch块可以捕获写入过程中的异常(比如权限不足、磁盘空间不足等),方便排查问题。
内容的提问来源于stack exchange,提问作者Slade
相关产品推荐
相关产品推荐

