有趣的Node爬虫,数据导出成Excel
最近一直没更新了诶,因为学习Backbone好头痛,别问我为什么不继续AngularJs~因为2.0要出来了啊,妈蛋!好,言归正传,最近帮我的好基友扒数据,他说要一些股票债券的数据。我一听,那不就是要做爬虫了么...果断用Node做!(其实也有一个股票数据API,sina提供的,但是由于不适用于债券,没办法,只好自己动手丰衣足食了)
工欲善其事,必先利其器嘛,蓬勃的Node社区提供了非常多的好的工具,下面我列出将要使用的工具:
- request,封装了Node的原生的http模块,使API更加简洁明了。
- cheerio,简化的jQuery库,可以让你操作DOM事半功倍。
- node-xlsx,Node平台上非常好用的读写xlsx的插件。
- 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的更多相关文章
- Pl/sql 如何将oracle的表数据导出成excel文件?
oracle将表数据导出成excel文件的方法 1)在SQL窗体上,查询需要导出的数据 --查询数据条件-- ; 结果视图 2)在查询结果的空白处,右键选择Copy to Excel 3) 查看导出e ...
- Extjs — Grid数据导出成Excel
最近因为项目问题,需要解决Extjs导出成Excel的问题. 下面简单描述这个问题解决的步骤如下: 1.先在js文件里写了一个button的handler事件,通过点击按钮,来实现调用ExportEx ...
- jquery.table2excel,将HTML的table标签数据导出成excel
<!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content=&quo ...
- 使用SSM框架实现Sql数据导出成Excel表
SSM框架实现SQL数据导出Excel 思路 首先在前端页面中添加一个导出功能的button,然后与后端controller进行交互. 接着在相应的controller中编写导出功能方法. 方法体: ...
- 将数据导出成excel表
/// <summary> /// 生成excel表 /// </summary> /// <param name="dt">数据表</p ...
- 将DataTable中的数据导出成Excel
public bool ExportFile(System.Data.DataTable dt){ SaveFileDialog sfd = new SaveFileDialog(); s ...
- mysql中数据导出成excel文件语句
代码如下 复制代码 mysql>select * from xi_table into outfile ’d:test.xls’; 导出为txt文件: 代码如下 复制代码 select * f ...
- 史上最简单的在 Yii2.0 中将数据导出成 Excel
在 vendor/yiisoft/yii2/helpers/ 创建一个 Excel.php <?php namespace yii\helpers; class Excel{ ...
- java数据导出成 EXCEL
/** * * @param out 输出流 * @param maplist 数据 * @param title 标题 * @param headers 表头 * @param keys 表头对应的 ...
随机推荐
- Git for windows 中文乱码解决方案
1.git status时显示乱码,如下: \316\304\261\276\316\304\265\265.txt 解决方案: $ git config --global core.quotepat ...
- chrome调试、移动端调试
chrome 32版本后,添加 DevTools for Mobile 插件就可远程手机调试 DevTools for Mobile插件安装https://support.google.com/chr ...
- How to install JDK (Java Development Kit) on Linux
This tutorial will guide you on how to install JDK (Java Development Kit) on Linux. Since I use Cent ...
- BZOJ3105: [cqoi2013]新Nim游戏
题解: 线性基?类似于向量上的基底. 此题题解戳这里:http://blog.csdn.net/wyfcyx_forever/article/details/39477673 代码: #include ...
- linux下useradd -p 添加用户并设定密码
useradd 有个参数-p是设定密码,我试过,不能登录,今天想到这个问题,搜索得:-p 后面跟的是密文,也就是经过加密之后的那个串. 附上网上的破解shadow口令的链接,都是牛人啊.. http: ...
- 在VC中显示和处理图片的方法
落鹤生 发布于 2011-10-21 09:12 点击:344次 来自:blog.csdn.net/mengaim_cn 几种用GDI画图的方法介绍. TAG: GDI 法1:这个方法其实用的是 ...
- 私有pod简记
http://www.jianshu.com/p/7a82e977281c http://www.jianshu.com/p/ddc2490bff9f 两个工程 1 代码工程 在github上创建一个 ...
- DATAGUARD中手工处理日志v$archive_GAP的方法
从9i以后,oracle dataguard 备库一般都不需要手工处理丢失的日志,FAL自动会帮我们处理,下面通过个案例来讲下手工处理丢失的日志的方法: 1.在备库查询有哪些日志丢失,没应用到备库 S ...
- 一天一个Java基础——数组
一天一个变成了几天一个,最近接受的新东西太多.太快,有好多需要blog的但没有时间,这些基础知识应该是要深挖并好好研究的,不应该每次都草草了事,只看个皮毛. 数组: JVM将数组存储在一个称为堆(he ...
- Struts2中date标签乱码问题解决
1.出现的问题如下图 八月份以前没有问题,但从九月份开始就会出现乱码问题 2.开始解决 (1)在使用标签的JSP中加入: <%@taglib prefix="s" uri=& ...