V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
betamee
V2EX  ›  Node.js

一个有趣的爬虫经历: nodejs v8.4.0 环境下,处理 4w+数据写入 excel 两天未成功,望大佬们答疑解惑

  •  1
     
  •   betamee · 2017-09-13 01:20:57 +08:00 · 4274 次点击
    这是一个创建于 2638 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位 V 友们,第一次发帖,有个关于 nodejs 的问题请教下,具体记录在这篇帖子里: Issues-记录一次有趣的爬虫经历

    简单来讲,就是 nodejs v8 下一下子处理 4w+数据写入 excel 两天都没好。。。

    写入 excel 用的是 xlsx 这个库,自己写的处理函数主要用到 map 和 Object.assign,就是将数据格式化,再用 xlsx 处理。

    之前的 9k 多数据几个小时就好,数据量更小的话几分钟也能好,所以排除代码的问题。

    这个情况有点纠结啊,是不是 nodejs 下一次处理 4w+数据有问题? ==

    10 条回复    2017-09-13 13:07:29 +08:00
    oott123
        1
    oott123  
       2017-09-13 08:35:44 +08:00 via Android
    你居然等了两天???
    ReVanTis
        2
    ReVanTis  
       2017-09-13 09:32:38 +08:00 via Android
    先写 csv 再想办法转吧
    betamee
        3
    betamee  
    OP
       2017-09-13 10:13:42 +08:00 via iPhone
    @oott123 对.....挂在电脑上跑了两天都没有好......
    betamee
        4
    betamee  
    OP
       2017-09-13 10:16:24 +08:00 via iPhone
    @ReVanTis 当时也没考虑很多,直接用了 xlxs 库,数据小可以用,数据大了就 gg。就想知道这背后发生了什么(゚ o ゚;;
    lamada
        5
    lamada  
       2017-09-13 10:37:28 +08:00
    首先处理大量数据可以考虑分段,或者流的形式处理。
    betamee
        6
    betamee  
    OP
       2017-09-13 10:44:50 +08:00 via iPhone
    @lamada 嗯嗯,现在看来得做一下修改了🤣
    lamada
        7
    lamada  
       2017-09-13 10:45:14 +08:00   ❤️ 1
    或者拆分成多个子进程处理,这样哪一段数据有问题也更容易定位。看人家也有提 issue 说处理大量数据会有各种问题。其实用其他语言像 java 处理也不是很难,感觉会跟合适一点,有成熟的库,搭个本地服务器处理一下就好。
    betamee
        8
    betamee  
    OP
       2017-09-13 12:13:28 +08:00 via iPhone
    @lamada 嗯嗯,这几天赶工期准备先减少数据量把数据搞完再说,之后再好好研究下爬虫数据处理的问题。感谢老哥的建议👀
    kingme
        9
    kingme  
       2017-09-13 12:49:26 +08:00
    Object.assign 不要用。我记得京东那个基于 electron 的 excel 数据清理软件有提到,这里有性能问题
    fqzz
        10
    fqzz  
       2017-09-13 13:07:29 +08:00
    27: .reduce((prev, next) => Object.assign({}, prev, { [next.position]: { v: next.v } }), {});
    光算时间的话 Object.assign 是 O(n) 的时间复杂度,这 reduce 下去 O(n*n)。
    并且每次 assign 都是生成一个新对象,你可以测一下生成 4W 个 object 要多久,并且在每个 obj 上加上 2w 的属性 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6045 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 101ms · UTC 02:45 · PVG 10:45 · LAX 18:45 · JFK 21:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.