Nodejs 爬虫使用 eventproxy 控制并发

2016-08-02 03:06:21

use

target url:https://cnodejs.org/

cd nodejs

mkdir test && cd test

touch node.js

抓取其首页数据,共40篇文章。

  1. 首先爬取首页篇文章的URL,将得到的40篇文章的URL存入数组articleUrlArr
  2. 然后爬取每篇文章的详细内容。
var eventproxy = require('eventproxy');  
var superagent = require('superagent');  
var cheerio = require('cheerio');

var articleUrlArr = [],  
    baseUrl = 'https://cnodejs.org/';

superagent.get(baseUrl).end(function(err, res) {

    if (err) {
        console.log(err);
    }
    var $ = cheerio.load(res.text);
    // 获取该页所有文章的链接
    $('#topic_list .topic_title').each(function(idx, elements) {

        var href = baseUrl+elements.attribs.href;
        articleUrlArr.push(href);
    });
    //打印文章数据
    console.log(articleUrlArr);
});

https://obmtpiscz.qnssl.com/nodejs.png 然后再分别爬取40篇文章的详细内容,即发出40个并发请求,同时爬取数据,调用eventproxy 的 #after API。

articleUrlArr.forEach(function (url) {  
  superagent.get(url).end(function (err, res) {
      console.log('fetch ' + url + ' successful');
      ep.emit('task', [url, res.text]);
    });
});
ep.after('task', articleUrlArr.length, function (data) {  
  // data为一个数组,包含了40次ep.emit('task', pair)中的pair
    data = data.map(function (topicPair) {
        // 接下来都是 jquery 的用法了
        var url = topicPair[0];
        var html = topicPair[1];
        var $ = cheerio.load(html);
        return ({
            title: $('.topic_full_title').text().trim(),
            href: url,
            comment1: $('.reply_content').eq(0).text().trim(),
        });
    });

    console.log('final:');
    console.log(data);
});
HTTPS:为 Ghost 设置 SSL 连接

HTTPS:超文本传输安全协议(Hypertext Transfer Protocol Secure)是一种网络安全传输协议。在计算机网络上,HTTPS经由超文本传输协议进行通信,但利用SSL/TLS来对数据包进行加密。HTTPS开发的主要目的,是提供对网络服务器的身份认证,保护交换数据的隐私与完整性。 HTTPS连接经常被用于万维网上的交易支付和企业信息系统中敏感信息的传输。 HTTPS 与 HTTP 的差异 与HTTP的URL由http:// 起始且默认使用端口 80 不同,HTTPS的URL由https:// 起始且默认使用端口443。 HTTP是不安全的,且攻击者通过监听和中间人攻击等手段,可以获取网站帐户和敏感信息等。HTTPS被设计为可防止前述攻击,并(在没有使用旧版本的SSL时)被认为是安全的。 Ghost设置SSL 首先申请SSL证书,可选择startSSL(免费一年)或自行购买。 具体申请过程较为繁琐,自行search,得到crt证书及key 环境:centos、nginx、nodejs、ghost ssh后执行: mkdir /etc/nginx/ssl

React Native 初始化项目慢的解决办法

初始化React Native:react-native init ProjectName 由于墙的原因,即便开ss也会经常卡着不动。再次感谢方教授! 先看下NMP官网对 node-gyp 的介绍 node-gyp Node.js native addon build tool node-gyp is a cross-platform command-line tool written in Node.js for compiling native addon modules for Node.js. It >bundles the gyp project used by the Chromium team and takes away the