最近一直没更新了诶,因为学习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. Zookeeper集群和HBase集群

    1.部署Zookeeper集群(hadoop0\hadoop1\hadoop2) 1.1.在hadoop0上解压缩Zookeeper-3.4.5.tar.gz 1.2.执行命令 cp conf/zoo ...

  2. Jquery的.post说解

    Jquery的.post说解(一) 准备工作 ·Customer类   public class Customer {     public int Unid { get; set; }     pu ...

  3. TeeChart的X轴,使用伪装的时间

    TeeChart曲线的X轴是时间,但是频率很高.没法完全显示. 例如,一秒钟有2000个点,那么点与点的间隔为0.5毫秒. 使用TChart类的GetAxisLabel事件, 函数手册上对此事件的解释 ...

  4. Topcoder SRM 630 (500 floyed 暴力 _builtin_popcount())

    题意:给n个点,保证图联通,给点相连的距离,求一个最多的点,这些点之间的距离都是相同的. 分析: 下面的代码是我们房间第一的大神的,写的很简洁,我的思路和他的一样,但是我不知道错哪了. 思路是暴力枚举 ...

  5. 二维树状数组(水题) POJ1195

    前段时间遇到线段树过不了,树状数组却过了的题.(其实线段树过得了的) 回忆了下树状数组. 主要原理,还是二进制位数,每一项的和表示其为它的前((最后一位1及其后)的二进制数)和,可从二进制图来看.(用 ...

  6. JAVA将Excel中的报表导出为图片格式(二)实现思路

    接上文,一封类似于下方设计的Excel报表,如何将它指定的区域导出为样式一模一样的JPG图片呢? 要实现这个功能没有现成的解决方案,谷歌度娘了好久也没有,最终自己想了几条思路: 思路1:将报表中的背景 ...

  7. Asp.Net微信登录-手机网站APP应用

    要求:公众号必须先认证,认证费用¥300/年,比较黑 一.微信登录核心代码 //核心代码,没判断异常 1.登录页面 protected void Page_Load(object sender, Ev ...

  8. Java知识点:javac命令

    javac命令初窥 注:以下红色标记的参数在下文中有所讲解. 用法: javac <options> <source files> 其中, 可能的选项包括:   -g     ...

  9. acdream 1408 "Money, Money, Money" (水)

    题意:给出一个自然数x,要求找两个自然数a和b,任意多个a和b的组合都不能等于x,且要可以组合成大于x的任何自然数.如果找不到就输出两个0.(输出任意一个满足条件的答案) 思路:x=偶数时,无法构成, ...

  10. Java [Leetcode 219]Contains Duplicate II

    题目描述: Given an array of integers and an integer k, find out whether there are two distinct indices i ...