惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
小众软件
小众软件
博客园_首页
G
Google Developers Blog
Apple Machine Learning Research
Apple Machine Learning Research
MyScale Blog
MyScale Blog
Engineering at Meta
Engineering at Meta
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
Docker
B
Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Stack Overflow Blog
Stack Overflow Blog
宝玉的分享
宝玉的分享

博客园 - dataxiu.com

[原创.数据可视化系列之十三]idw反距离权重插值算法的javascript代码实现 [原创.数据可视化系列之八]使用等d3进行灰度图转伪彩色 [原创.数据可视化系列之七]阿里竞赛作品技术展示 [原创.数据可视化系列之六]使用openlyaers进行公网地图剪切 [原创.数据可视化系列之五]韩国"萨德"系统防御图 [原创.数据可视化系列之四]跨平台,多格式的等值线和等值面的生成 [原创.数据可视化系列之三]使用Ol3加载大量点数据 [原创.数据可视化系列之二]使用cesium三维地图展示美国全球军事基地分布 [原创.数据可视化系列之一]使用openlayers 3 显示聚合数据 管理类软件的界面模板。 使用SilverLight开发ARPG游戏(一) 买联想学生机器的遭遇:问联想1(连载) 联想09年春节学生机开卖了。 谈UrlRewriter在XP和2003上IIS设置的差异 使用SilverLight构建插件式应用程序(九) —聊天插件客户端的实现 .NET 访问JAVA的WebService使用SOAP头 使用SilverLight构建插件式应用程序(八) —聊天插件Duplex WCF的实现 使用SilverLight构建插件式应用程序(七) 使用SilverLight构建插件式应用程序(六)
[原创.数据可视化系列之十二]使用 nodejs通过async await建立...
dataxiu.com · 2017-02-09 · via 博客园 - dataxiu.com

      做数据分析和可视化工作,最重要的一点就是数据抓取工作,之前使用Java和python都做过简单的数据抓取,感觉用的很不顺手。

      后来用nodejs发现非常不错,通过js就可以进行数据抓取工作,类似jquery的方法进行数据分析和抽取,最关键的是,不用编译就可以放上去跑,能够快速应对网站变化。但是他的全部异步模式也是带来很多问题:

  1. 太多而回调会带来深入的嵌套,程序可读性不好。
  2. 循环当中嵌套异步的模式,如果需要抓取多个地址数据,并把数据进行拼合成一个文件的时候,你可能就会抓狂了,比较不好处理,因为都是异步的,你不知道这几个链接那个先完成,那个后完成,啥时候关闭文件等等,这是我最讨厌的一个地方。
  3. Node 7中发布的async await特性就是为了解决过深的回调嵌套等的问题,下边的代码就是循环,抓数据,处理数据,然后再把数据post出去的例子,并且中间加了休眠:
 1     async function main() {
 2         var urls = [];
 3         for (var i = 0; i <= 34; i++) {
 4             console.info("当前页数:"+i);
 5             //从原始网址获取数据
 6             var myurl = "https://www.cnblogs.org/"+i+".json?b3831331f475fdcb13df";
 7             //同步,这才是最重要的
 8             var body = await request.get(myurl);
 9             var datas = JSON.parse(body);
10             //循环获取到的结果
11             for (var j = 0; j < datas.length; j++) {
12                 var content = datas[j];
13                 var options = {
14                     method: 'POST',
15                     uri: 'http://localhost:8080/save.do',
16                     form: {
17                         id: 1,
18                     },
19                     headers: {
20                         /* 'content-type': 'application/x-www-form-urlencoded' */ // Set automatically
21                     }
22                 };
23                 try {
24                     //同步,把数据发送到另一个网址上,保存
25                     let result = await request.post(options);
26                 } catch (e) {
27 
28                 }
29                 //休眠5秒,避免太频繁被干掉,或者随机一个时间
30                 await sleep(5000);
31             }
32         }
33     }
34     main();

运行的时候,是用 node --harmony-async-await app.js的方式启动就可以了。注意node使用v7之上的版本,最新为7.5.0。