zoukankan      html  css  js  c++  java
  • [原创.数据可视化系列之十二]使用 nodejs通过async await建立同步数据抓取

          做数据分析和可视化工作,最重要的一点就是数据抓取工作,之前使用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。

  • 相关阅读:
    Splunk数据处理
    使用http://start.spring.io/ 生成工程
    SpringBoot和SpringCloud区别
    Spring Cloud
    Spring Boot
    Splunk大数据分析经验分享
    Splunk和ELK深度对比
    Git 教程
    Docker 教程
    STL中的unique和unique_copy函数
  • 原文地址:https://www.cnblogs.com/songsgroup/p/6382491.html
Copyright © 2011-2022 走看看