一个有趣的爬虫经历: nodejs v8.4.0 环境下,处理 4w+数据写入 excel 两天未成功,望大佬们答疑解惑 - V2EX
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 4647 次点击
    这是一个创建于 2958 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位 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     Solana     2518 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 05:05 PVG 13:05 LAX 22:05 JFK 01:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86