码迷,mamicode.com
首页 > 其他好文 > 详细

node 爬虫初尝试(二)async控制并发量

时间:2018-09-13 16:17:53      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:project   nbsp   syn   load   OLE   ecb   ons   attr   com   

var eventproxy = require(‘eventproxy‘);//并发控制
var async = require(‘async‘);//并发量控制
var express = require(‘express‘);
var utility = require(‘utility‘);//utility.md5(‘aaa‘)转md5
var superagent = require(‘superagent‘);//ajax请求
var cheerio = require(‘cheerio‘);//页面dom操作,jq
var app = new express();
var url = require(‘url‘);
var ep = new eventproxy();
var inspect = require(‘util‘).inspect;

 

app.get(‘/‘, function (req, res, next) {//本地页面访问路径,访问后执行 http://localhost:3000/

 

superagent.get(‘http://wiki.jikexueyuan.com/project/node-lessons/superagent-cheerio.html‘).end(function (err, sres) {//访问源网址拿到其中更多页面的网址
 
// 常规的错误处理
if (err) {
  return next(err);
}
 
var urlArr = [];//需要获取的链接数组
var $ = cheerio.load(sres.text);//sres.text可获取页结构,通过cherrio转为jq对象

 

$(‘.detail-navlist-title a‘).each(function(i,e){
  var href = $(e).attr(‘href‘);
  urlArr.push(href);
})

 

//console.log(urlArr);
var fetchUlr = function(url,someCB){
  superagent.get(url).end(function(err,sres){
    //当全部执行完毕后null为true即 callback(true,sres.text),现在理解为mapLimit最后的函数function(err,result)
    someCB(null,sres.text);
  })
}

 

async.mapLimit(urlArr,5,function(url,someCB){//最大并发数为5
  fetchUlr(url,someCB);//每次执行
},function(err, result){//执行urlArr次后执行
  console.log(‘结束‘);
  var datas = result.map(function(dom){
  var $ = cheerio.load(dom);//每个页面的dom结构
  return ({
    title:$(‘.markdown-body h1‘).html()
  })
})
 
res.setHeader(‘content-type‘, ‘text/html;charset=gb2312‘);//指定响应编码,否则乱码
res.send(datas);//发送到页面显示
})



 
 
});
}).listen(3000);

 

node 爬虫初尝试(二)async控制并发量

标签:project   nbsp   syn   load   OLE   ecb   ons   attr   com   

原文地址:https://www.cnblogs.com/92xcd/p/9640608.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!