最近一直没更新了诶,因为学习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. pt-online-schema-change

    [root@mysql5 ~]# pt-online-schema-change --alter=,u=root,p=1qaz2wsx,D=test,t=ddl_test --print --dry- ...

  2. SGU 441 Set Division(矩阵快速幂)

    题目链接:http://acm.sgu.ru/status.php 题意:将n个有区别的球放到m个无区别的盒子里,盒子不能为空.不同的方案数. 思路:设f[i][j]表示将前i个球放到j个盒子里,那么 ...

  3. Awesome Javascript(中文翻译版)

    [导读]:GitHub 上有一个 Awesome – XXX 系列的资源整理.awesome-javascript 是 sorrycc 发起维护的 JS 资源列表,内容包括:包管理器.加载器.测试框架 ...

  4. hdu 4973 A simple simulation problem. (线段树)

    题目链接 题意: 给定n长的序列 m个操作 序列默认为 1, 2, 3···n 操作1:D [l,r] 把[l,r]区间增长 :( 1,2,3,4 进行 D [1,3]变成 1,1,2,2,3,3,4 ...

  5. asp.net清除页面缓存防止同时登录

    //清除页面缓存,防止页面回退重复提交数据 在页面里做以下设置就可以使页面的缓存失效,每次都需要获取新页面. Response.Cache.SetCacheability(System.Web.Htt ...

  6. BZOJ_1029_[JSOI2007]_建筑抢修_(贪心+优先队列)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1029 \(n\)个任务需要完成,给出每个任务所需时间\(t_1\)与deadline\(t_2 ...

  7. Jqgrid入门-显示基本的表格(一)

    首先对Jqgrid网格插件做个简要的说明.在众多的表格插件中,Jqgrid的特点是非常鲜明的.         特点如下: 完整的表格呈现与运算功能,包含换页.栏位排序.grouping.新增.修改及 ...

  8. 【 D3.js 视频系列 】 飞速入门

    本教程共包含 6 个视频,目的是为了帮助初学者快速入门,以便阅读本站其他文章. 本教程的名称为"飞速入门",是为初学者准备的,其中包括了 D3 开发中最基础的知识.对 D3 掌握得 ...

  9. Java [Leetcode 206]Reverse Linked List

    题目描述: Reverse a singly linked list. 解题思路: 使用递归或者迭代的方法. 代码如下: 方法一:递归 /** * Definition for singly-link ...

  10. linux 下 NetBeans 字体大小设置

    在linux mint 12下安装了 NetBeans7.1.2使用之后,觉得字体不好看,字体普遍特别大,分三个方面改NetBeans的字体. 1. 代码字体大小 点击NetBeans菜单,工具--& ...