[原创.数据可视化系列之十二]使用 nodejs通过async await建立同步数据抓取
做数据分析和可视化工作,最重要的一点就是数据抓取工作,之前使用Java和python都做过简单的数据抓取,感觉用的很不顺手。
后来用nodejs发现非常不错,通过js就可以进行数据抓取工作,类似jquery的方法进行数据分析和抽取,最关键的是,不用编译就可以放上去跑,能够快速应对网站变化。但是他的全部异步模式也是带来很多问题:
- 太多而回调会带来深入的嵌套,程序可读性不好。
- 循环当中嵌套异步的模式,如果需要抓取多个地址数据,并把数据进行拼合成一个文件的时候,你可能就会抓狂了,比较不好处理,因为都是异步的,你不知道这几个链接那个先完成,那个后完成,啥时候关闭文件等等,这是我最讨厌的一个地方。
- Node 7中发布的async await特性就是为了解决过深的回调嵌套等的问题,下边的代码就是循环,抓数据,处理数据,然后再把数据post出去的例子,并且中间加了休眠:
async function main() {
var urls = [];
for (var i = 0; i <= 34; i++) {
console.info("当前页数:"+i);
//从原始网址获取数据
var myurl = "https://www.cnblogs.org/"+i+".json?b3831331f475fdcb13df";
//同步,这才是最重要的
var body = await request.get(myurl);
var datas = JSON.parse(body);
//循环获取到的结果
for (var j = 0; j < datas.length; j++) {
var content = datas[j];
var options = {
method: 'POST',
uri: 'http://localhost:8080/save.do',
form: {
id: 1,
},
headers: {
/* 'content-type': 'application/x-www-form-urlencoded' */ // Set automatically
}
};
try {
//同步,把数据发送到另一个网址上,保存
let result = await request.post(options);
} catch (e) {
}
//休眠5秒,避免太频繁被干掉,或者随机一个时间
await sleep(5000);
}
}
}
main();
运行的时候,是用 node --harmony-async-await app.js的方式启动就可以了。注意node使用v7之上的版本,最新为7.5.0。
[原创.数据可视化系列之十二]使用 nodejs通过async await建立同步数据抓取的更多相关文章
- 数据可视化实例(十二): 发散型条形图 (matplotlib,pandas)
https://datawhalechina.github.io/pms50/#/chapter10/chapter10 如果您想根据单个指标查看项目的变化情况,并可视化此差异的顺序和数量,那么散型条 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- Java 设计模式系列(十二)策略模式(Strategy)
Java 设计模式系列(十二)策略模式(Strategy) 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以 ...
- hbase源码系列(十二)Get、Scan在服务端是如何处理
hbase源码系列(十二)Get.Scan在服务端是如何处理? 继上一篇讲了Put和Delete之后,这一篇我们讲Get和Scan, 因为我发现这两个操作几乎是一样的过程,就像之前的Put和Del ...
- webpack4 系列教程(十二):处理第三方JavaScript库
教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步<webpack4 系列教程(十二):处理第三方 JavaScript 库>原文地址.或者来我的小站看更多内容:godbm ...
- OSGi 系列(十二)之 Http Service
OSGi 系列(十二)之 Http Service 1. 原始的 HttpService (1) 新建 web-osgi 工程,目录结构如下: (2) HomeServlet package com. ...
- [原创.数据可视化系列之五]韩国"萨德"系统防御图
自从7月8日美国和韩国共同宣布将在韩国部署萨德反导系统后,韩国国内对此事的巨大争议以及本地区一些国家的强烈不满情绪在持续发酵.“萨德”(THAAD)全称“末段高空区域防御系统”,是美国导弹防御局和美国 ...
- Pandas系列(十二)-可视化详解
目录 1. 折线图 2. 柱状图 3. 直方图 4. 箱线图 5. 区域图 6. 散点图 7. 饼图六边形容器图 数据分析的结果不仅仅只是你来看的,更多的时候是给需求方或者老板来看的,为了更直观地看出 ...
- [原创.数据可视化系列之八]使用等d3进行灰度图转伪彩色
对灰度图进行彩色化是数据可视化中常见的需求,使用d3在客户端比较容易实现,本文使用d3生成图片,并显示: 代码如下: 代码中首先下载数据文件,然后设定d3的色带信息,生成一个空白的canvas元素,并 ...
随机推荐
- 一种比较简单的在USB U盘中访问nandflash的方法
u8 nandflash_write_buffer[NAND_SERECT_FULL_SIZE]; static int currentBlock = -1; static int currentPa ...
- Java NIO 与 IO
我应该何时使用 IO,何时使用 NIO 呢?在本文中,我会尽量清晰地解析 Java NIO 和 IO 的差异.它们的使用场景,以及它们如何影响您的代码设计. Java NIO 和 IO 的主要区别 下 ...
- S3C2440 ADC详解
S3C2440拥有八通道的十位ADC, 最大转换率为2.5MHz A/D转换器时钟下的500KSPS.A/D转换器支持片上采样-保持功能和掉电模式的操作. 八个通道中有四个通道适用于电阻屏的触摸屏触摸 ...
- 菊花加载第三方--MBprogressHUD
上次说到了网络请求AFN,那么我们在网络请求的时候,等待期间,为了让用户不认为是卡死或程序出错,一般都会放一个菊花加载,系统有一个菊花加载类叫UIProgressHUD.但是我今天要说的是一个替代它的 ...
- FIFO存储器
FIFO( First In First Out)简单说就是指先进先出.由于微电子技术的飞速发展,新一代FIFO芯片容量越来越大,体积越来越小,价格越来越便宜.作为一种新型大规模集成电路,FIFO芯片 ...
- leetcode--002 rpn
package leetcode; import java.util.Stack; public class RPN { public static int evalRPN(String[] toke ...
- CodeSmith批量生成实体
保存以下文件为ModelBatch.cst <%@ Register Name="Model" Template="D:\Q\web\LHWYVISIT\trunk ...
- LIQN join on 后跟多个条件
sql 版:SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[RequiredD ...
- IOS开发中深拷贝与浅拷贝
简而言之: 1.对不可变的非集合对象,copy是指针拷贝,mutablecopy是内容拷贝 2.对于可变的非集合对象,copy,mutablecopy都是内容拷贝 3.对不可变的数组.字典.集合等集合 ...
- jade的特点
jade特点 1超强的可读性 2灵活易用的缩进 3块扩展 4代码默认进过编码处理,以增强安全性 5编译及运行时的上下文错误报告 6命令行编译支持 7html5模式(使用 !!!5文档类型) 8可选的内 ...