前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬虫数据的json转为csv文件

爬虫数据的json转为csv文件

作者头像
biaoblog.cn 个人博客
发布2022-08-11 19:26:28
6020
发布2022-08-11 19:26:28
举报

需求:我们之前通过接口爬虫 爬取一些数据,

这些数据都是Json格式的,为了方便我们的甲方使用

所以需要把这些数据转为csv 方便他们使用(例如在表单里面搜索,超链接跳转等等)

直接上代码吧:

在转换之前 我们需要对爬取的源数据进行一次过滤

用到我们的node的fs独写文件模块工具

代码语言:javascript
复制
const fs = require("fs");
const data = require("./cjdropshipping/data1.json");

//过滤一下
let newData = data.users.map((item) => {
  return {
    pk: item.pk,
    username: item.username,
    full_name: item.full_name,
    is_private: item.is_private,
    source_Url: `https://www.instagram.com/${item.username}`,
  };
});
// console.log(newData);
// 过滤好用 重新写入一个新的文件中
fs.writeFile(
  "./cjdropshipping/data1_ed.json",
  JSON.stringify(newData),
  (err) => {
    if (err) console.log("写文件操作失败");
    else console.log("写文件操作成功");
  }
);

通过上面的操作,我们的数据已经做好转成csv的准备了

下面是我们转json转csv的代码:

代码有点多,下面的方法是直接从别人封装好的拿过来的

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <h1>jsonToCsv</h1>
    <hr />
    <button id="btn">json To csv</button>
  </body>

  <script>
    document.querySelector("#btn").onclick = () => {
      fetch("cjdropshipping/data1_ed.json")
        .then((res) => {
          return res.json();
        })
        .then((csvJson) => {
          console.log(csvJson);
          var downName = "IG_cjdropshipping_followings";
          var title = [
            "pk",
            "username",
            "full_name",
            "is_private",
            "source_Url",
          ]; //csv表头
          var key = ["pk", "username", "full_name", "is_private", "source_Url"]; // 数据key

          clickDownload(csvJson, downName, title, key);
        });
    };

    //csv下载文件名,用户拼接
    //csv下载
    function clickDownload(csvJson, downloadName, title, key) {
      JSonToCSV.setDataConver({
        data: csvJson,
        fileName: downloadName,
        columns: {
          title, //csv表头
          key,

          // 过滤 n = key v = value
          formatter: function (n, v) {
            if (n === "xxxxx") {
              return Number(v).toFixed(2);
            }
            if (v === undefined) {
              return " ";
            }
          },
        },
      });
    }

    //csv下载
    (function (global, factory) {
      "use strict";
      if (typeof module === "object" && typeof module.exports === "object") {
        module.exports = global.document
          ? factory(global, true)
          : function (w) {
              return factory(w);
            };
      } else {
        factory(global);
      }
    })(window, function () {
      var JSonToCSV = {
        /*
    * obj是一个对象,其中包含有:
    * ## data 是导出的具体数据
    * ## fileName 是导出时保存的文件名称 是string格式
    * ## showLabel 表示是否显示表头 默认显示 是布尔格式
    * ## columns 是表头对象,且title和key必须一一对应,包含有
         title:[], // 表头展示的文字
         key:[], // 获取数据的Key
         formatter: function() // 自定义设置当前数据的 传入(key, value)
    */
        setDataConver: function (obj) {
          var bw = this.browser();
          if (bw["ie"] < 9) return; // IE9以下的
          var data = obj["data"],
            ShowLabel =
              typeof obj["showLabel"] === "undefined" ? true : obj["showLabel"],
            fileName = (obj["fileName"] || "UserExport") + ".csv",
            columns = obj["columns"] || {
              title: [],
              key: [],
              formatter: undefined,
            };
          var ShowLabel = typeof ShowLabel === "undefined" ? true : ShowLabel;
          var row = "",
            CSV = "",
            key;
          // 如果要现实表头文字
          if (ShowLabel) {
            // 如果有传入自定义的表头文字
            if (columns.title.length) {
              columns.title.map(function (n) {
                row += n + ",";
              });
            } else {
              // 如果没有,就直接取数据第一条的对象的属性
              for (key in data[0]) row += key + ",";
            }
            row = row.slice(0, -1); // 删除最后一个,号,即a,b, => a,b
            CSV += row + "\r\n"; // 添加换行符号
          }
          // 具体的数据处理
          data.map(function (n) {
            row = "";
            // 如果存在自定义key值
            if (columns.key.length) {
              columns.key.map(function (m) {
                row +=
                  '"' +
                  (typeof columns.formatter === "function"
                    ? columns.formatter(m, n[m]) || n[m]
                    : n[m]) +
                  '",';
              });
            } else {
              for (key in n) {
                row +=
                  '"' +
                  (typeof columns.formatter === "function"
                    ? columns.formatter(key, n[key]) || n[key]
                    : n[key]) +
                  '",';
              }
            }
            row.slice(0, row.length - 1); // 删除最后一个,
            CSV += row + "\r\n"; // 添加换行符号
          });
          if (!CSV) return;
          this.SaveAs(fileName, CSV);
        },
        SaveAs: function (fileName, csvData) {
          var bw = this.browser();
          if (!bw["edge"] && !bw["ie"]) {
            var alink = document.createElement("a");
            alink.id = "linkDwnldLink";
            alink.href = this.getDownloadUrl(csvData);
            document.body.appendChild(alink);
            var linkDom = document.getElementById("linkDwnldLink");
            linkDom.setAttribute("download", fileName);
            linkDom.click();
            document.body.removeChild(linkDom);
          } else if (bw["ie"] >= 10 || bw["edge"] == "edge") {
            var _utf = "\uFEFF";
            var _csvData = new Blob([_utf + csvData], {
              type: "text/csv",
            });
            window.navigator.msSaveBlob(_csvData, fileName);
          } else {
            var oWin = window.top.open("about:blank", "_blank");
            oWin.document.write("sep=,\r\n" + csvData);
            oWin.document.close();
            oWin.document.execCommand("SaveAs", true, fileName);
            oWin.close();
          }
        },
        getDownloadUrl: function (csvData) {
          var _utf = "\uFEFF"; // 为了使Excel以utf-8的编码模式,同时也是解决中文乱码的问题
          if (window.Blob && window.URL && window.URL.createObjectURL) {
            var csvData = new Blob([_utf + csvData], {
              type: "text/csv",
            });
            return URL.createObjectURL(csvData);
          }
          // return 'data:attachment/csv;charset=utf-8,' + _utf + encodeURIComponent(csvData);
        },
        browser: function () {
          var Sys = {};
          var ua = navigator.userAgent.toLowerCase();
          var s;
          (s =
            ua.indexOf("edge") !== -1
              ? (Sys.edge = "edge")
              : ua.match(/rv:([\d.]+)\) like gecko/))
            ? (Sys.ie = s[1])
            : (s = ua.match(/msie ([\d.]+)/))
            ? (Sys.ie = s[1])
            : (s = ua.match(/firefox\/([\d.]+)/))
            ? (Sys.firefox = s[1])
            : (s = ua.match(/chrome\/([\d.]+)/))
            ? (Sys.chrome = s[1])
            : (s = ua.match(/opera.([\d.]+)/))
            ? (Sys.opera = s[1])
            : (s = ua.match(/version\/([\d.]+).*safari/))
            ? (Sys.safari = s[1])
            : 0;
          return Sys;
        },
      };
      window.JSonToCSV = JSonToCSV;
    });
  </script>
</html>

以上,记录一下

参考文档:https://blog.csdn.net/qq_39706128/article/details/80002366

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档