如何在JavaScript中自动获取巴西新冠官网的CSV数据序列
如何用JavaScript自动获取巴西卫生部新冠数据的CSV文件
好问题!咱们一步步来搞定这个需求:
第一步:找到CSV文件的真实下载链接
网站上的下载按钮通常是触发动态请求的,所以得先抓包拿到实际的CSV地址:
- 打开浏览器开发者工具(按F12),切换到「Network」标签
- 点击网站上的CSV下载按钮
- 在请求列表里找到类型为
text/csv的请求,复制它的「Request URL」——这就是我们需要的直接下载链接
⚠️ 注意:这个URL可能会随网站更新或带有临时参数,如果之后请求失效,需要重新抓包获取。
第二步:用JavaScript请求并处理CSV数据
场景1:无跨域限制(直接请求成功)
如果直接请求CSV链接没有出现CORS错误,可以用原生fetch API直接获取:
// 替换成你抓包得到的真实CSV链接 const csvUrl = "你的CSV实际下载地址"; fetch(csvUrl) .then(response => { if (!response.ok) { throw new Error(`请求失败,状态码:${response.status}`); } return response.text(); // 将响应转为CSV文本 }) .then(csvText => { console.log("原始CSV数据:", csvText); // 想要解析成JSON格式?可以用第三方库比如Papa Parse // 安装方式:npm install papaparse,或者引入本地脚本 const parsedData = Papa.parse(csvText, { header: true }); // 第一行作为表头 console.log("解析后的JSON数据:", parsedData.data); }) .catch(error => { console.error("获取CSV出错:", error); });
场景2:遇到CORS跨域限制
如果前端直接请求出现「CORS policy」错误,说明目标网站不允许跨域访问,这时候需要通过后端代理中转请求:
示例:用Node.js + Express搭建简易代理
// 先安装依赖:npm install express node-fetch const express = require('express'); const fetch = require('node-fetch'); const app = express(); // 代理接口 app.get('/proxy-covid-csv', async (req, res) => { try { const csvUrl = "你的CSV实际下载地址"; const response = await fetch(csvUrl); const csvContent = await response.text(); res.setHeader('Content-Type', 'text/csv'); res.send(csvContent); } catch (err) { res.status(500).send('获取CSV数据失败'); } }); app.listen(3000, () => { console.log('代理服务器运行在 http://localhost:3000'); });
然后前端请求这个代理地址:
fetch('http://localhost:3000/proxy-covid-csv') .then(response => response.text()) .then(csvText => { console.log('通过代理获取的CSV数据:', csvText); // 同样可以用Papa Parse解析为JSON }) .catch(err => console.error('请求代理出错:', err));
额外提醒
- 目标网站的CSV链接可能会不定期更新,记得定期检查链接有效性
- 如果需要定时自动获取,可以结合
setInterval(前端)或者后端定时任务(比如Node.js的node-schedule)来实现
内容的提问来源于stack exchange,提问作者Eduardo Legnaioli Facchioli
相关产品推荐
相关产品推荐

