最近一直没更新了诶,因为学习Backbone好头痛,别问我为什么不继续AngularJs~因为2.0要出来了啊,妈蛋!好,言归正传,最近帮我的好基友扒数据,他说要一些股票债券的数据。我一听,那不就是要做爬虫了么...果断用Node做!(其实也有一个股票数据API,sina提供的,但是由于不适用于债券,没办法,只好自己动手丰衣足食了)

  工欲善其事,必先利其器嘛,蓬勃的Node社区提供了非常多的好的工具,下面我列出将要使用的工具:

  1. request,封装了Node的原生的http模块,使API更加简洁明了。
  2. cheerio,简化的jQuery库,可以让你操作DOM事半功倍。
  3. node-xlsx,Node平台上非常好用的读写xlsx的插件。
  4. fs,Node自带的文件操作的模块

  这次,因为是一个入门教程,涉及到的东西当然也就不多。比如对时间格式化的moment插件,还有对傻(哔!)的GBK和gb2312编码解码的插件iconv-lite,这些都是非常好的东西,可以帮助大家更快更舒服的构建自己所需要的东西。所以就要求如何更快的学习阅读API。(当然英文要好啊擦!)

  首先就是通过npm加载node_modules,你可以一个个加载(npm install request),也可以在npm的package.json里的dependencies一次性npm install加载。相信大家都已经耳熟能详啦,就不再赘述啦!(不知道的赶紧去补啊擦)

  然后我们的爬虫之旅就开始了,首先,当然就是各种require。

  然后指定一个URL,供request去发送请求。就像下面一样,这是一个异步的函数,回调函数的三个参数当然很好理解啦。

  重点是在body上,body是将整个url的html文档解析并存入body中。如果用http.on("data"),可麻烦啦。这下可好,已经帮你封装妥当。当我们有一个DOM文档,最想干的事情当然就是,操作DOM啊!这时cheerio就派上场了,它可以像jQuery一般操作文档。我们来看一下,怎么做的。

  

  是不是十分的简单易懂呢,之后我们就可以对body尽情的揉捏了。通过jQuery的选择器,获取特定的DOM上的值,然后保存起来。最后来说一说,如何将保存后的值,转化成一个Excel表格,也就是xlsx格式的文件。

  node-xlsx是通过操作一个数组,然后数组里面通过不同的对象来指定Excel的sheets,然后对象里面有各种属性,如data属性和name属性,一个是放数据的,一个是指定sheets的名称的,若不填则默认为Sheet。若存在多个同名Sheet,则会使用后一个,所以name属性,没事就加上吧~。data属性是精华,通过二维数组来确定行列。光说无益,来看一下代码。

  当把数据准备妥当后,便是通过fs模块的 writeFileSync 写入文件,参数分别为(文件名,文件数据,options选项)。最后node一执行,就可以导出文件了。可以查看一下成果。

  嗯,妥妥的!

  当然国内大部分坑爹的gb2312,就没那么简单咯。这里留个坑~~因为我在buffer这一块,也没弄懂~~。

有趣的Node爬虫,数据导出成Excel的更多相关文章

  1. Pl/sql 如何将oracle的表数据导出成excel文件?

    oracle将表数据导出成excel文件的方法 1)在SQL窗体上,查询需要导出的数据 --查询数据条件-- ; 结果视图 2)在查询结果的空白处,右键选择Copy to Excel 3) 查看导出e ...

  2. Extjs — Grid数据导出成Excel

    最近因为项目问题,需要解决Extjs导出成Excel的问题. 下面简单描述这个问题解决的步骤如下: 1.先在js文件里写了一个button的handler事件,通过点击按钮,来实现调用ExportEx ...

  3. jquery.table2excel,将HTML的table标签数据导出成excel

    <!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content=&quo ...

  4. 使用SSM框架实现Sql数据导出成Excel表

    SSM框架实现SQL数据导出Excel 思路 首先在前端页面中添加一个导出功能的button,然后与后端controller进行交互. 接着在相应的controller中编写导出功能方法. 方法体: ...

  5. 将数据导出成excel表

    /// <summary> /// 生成excel表 /// </summary> /// <param name="dt">数据表</p ...

  6. 将DataTable中的数据导出成Excel

    public bool ExportFile(System.Data.DataTable dt){    SaveFileDialog sfd = new SaveFileDialog();    s ...

  7. mysql中数据导出成excel文件语句

    代码如下 复制代码 mysql>select * from xi_table into outfile ’d:test.xls’; 导出为txt文件:  代码如下 复制代码 select * f ...

  8. 史上最简单的在 Yii2.0 中将数据导出成 Excel

    在 vendor/yiisoft/yii2/helpers/ 创建一个 Excel.php <?php namespace yii\helpers;   class Excel{         ...

  9. java数据导出成 EXCEL

    /** * * @param out 输出流 * @param maplist 数据 * @param title 标题 * @param headers 表头 * @param keys 表头对应的 ...

随机推荐

  1. UML与数据流图

    Ref: <数​据​库​设​计​理​论​及​应​用​(​3​)​—​—​需​求​分​析​及​数​据>http://wenku.baidu.com/link?url=hbhJFytMKT8A ...

  2. C# Index 定义索---引具体使用2

    窗体代码 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;usi ...

  3. DirectSound播放PCM(可播放实时采集的音频数据)

    前言 该篇整理的原始来源为http://blog.csdn.net/leixiaohua1020/article/details/40540147.非常感谢该博主的无私奉献,写了不少关于不同多媒体库的 ...

  4. hdu 4911 Inversion (分治 归并排序 求逆序数)

    题目链接 题意:给n个数,求交换k次相邻的数之后的最小的逆序数对. 用分治的方法,以前在poj上做过这种题,昨天比赛的时候忘了.... 下面的归并排序还是以前的模板. #include <ios ...

  5. poj 2891 Strange Way to Express Integers (扩展gcd)

    题目链接 题意:给k对数,每对ai, ri.求一个最小的m值,令m%ai = ri; 分析:由于ai并不是两两互质的, 所以不能用中国剩余定理. 只能两个两个的求. a1*x+r1=m=a2*y+r2 ...

  6. 安卓学习之--如何关闭所有的activity

    根据Activity的声明周期 方法1   我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标志 Intent ...

  7. Windows SDK 实现不规则窗口介绍

    不规则窗口在程序界面设计中能提供非常好的用户体验,以下是我程序运行时的效果图: 以下是代码,注意需要修改一些简单的位置,如资源ID,项目的头文件等,这些是根据你创建的win32程序的项目名改变的,我的 ...

  8. Android 怎样使用API

    本文针对Android开发如何使用API文档进行一些经验分享. 1.为什么需要掌握API的使用. 也许你需要完成一个功能时很多时候你在网上google一番,因为很可能找到有用的代码片段,甚至不用关心具 ...

  9. RPi 2B Raspbian SD卡内部架构

    /***************************************************************************** * RPi 2B Raspbian SD卡 ...

  10. 【 D3.js 高级系列 — 7.0 】 标注地点

    有时需要告诉用户地图上的一些目标,如果该目标是只需要一个坐标就能表示的,称其为"标注". 1. 标注是什么 标注,是指地图上只需要一个坐标即可表示的元素.例如,在经纬度(116, ...