最近一直没更新了诶,因为学习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. sublime-text3插件安装

    sublime-text3和sublime-text2一样安装插件前都需要先安装,Package control ,然而安装Package control的代码和sublime-text2又不相同.如 ...

  2. trackr: An AngularJS app with a Java 8 backend – Part IV 实践篇

    REST API对于前后端或后端与后端之间通讯是一个好的接口,而单页应用Single Page Applications (SPA)非常流行. 我们依然以trackr为案例,这是一个跟踪工作时间 请假 ...

  3. voliecty indexOf的写法

    Velocity allows you to use all Java methods available in your objects. So just write as if it was Ja ...

  4. UVa 1625 Color Length

    思路还算明白,不过要落实到代码上还真敲不出来. 题意: 有两个由大写字母组成的颜色序列,将它们合并成一个序列:每次可以把其中一个序列开头的颜色放到新序列的尾部. 对于每种颜色,其跨度定义为合并后的序列 ...

  5. SQL千万级数据设计和优化

    1. 数据太多.放在一个表肯定不行. 比如月周期表.一个月1000万,一年就1.2亿,如此累计下去肯定不行的.所以都是基于一个周期数据一个表.甚至一个周期数据就要分几个分表.主要是考虑实际的数据量而定 ...

  6. eclipse无法与手机连上的解决方案

    在eclipse上开发android应用,有时候会遇到eclipse无法识别手机的问题,就算把数据线拔了又插,插了又拔,哪怕是重启eclipse 甚至是重启电脑,这个问题也依然是解决不了.这时候就非常 ...

  7. 两个android程序间的相互调用(apk互调)

    通常我们用到的只是activity之间的互相跳转和调用,很少会用到apk级别的互相调用. 往往在一些应用上会用到,比如一个支付系统,可能会有很多的一系列的程序调用到:彩票系统.订票系统.团购网……全部 ...

  8. .NET面试题系列

    索引: .NET框架基础知识[1] - http://www.cnblogs.com/haoyifei/p/5643689.html .NET框架基础知识[2] - http://www.cnblog ...

  9. replace() MySQL批量替换指定字段字符串

    mysql replace实例说明: UPDATE tb1 SET f1=REPLACE(f1, 'abc', 'def'); REPLACE(str,from_str,to_str) 在字符串 st ...

  10. 对LR analysis的平均事务响应时间和summary中时间值不同的解释

    最近在做性能测试对LR结果分析时,又碰到了关于summary里与平均事务响应时间中各交易的响应时间值不同的问题.在此做个记录. 若交易中设置了思考时间,分析时需要注意查看是否过滤思考时间. 设置是否包 ...