博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
node 爬虫(-)
阅读量:4365 次
发布时间:2019-06-07

本文共 1385 字,大约阅读时间需要 4 分钟。

var eventproxy = require('eventproxy');//并发控制
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();
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);
urlArr.forEach(ele => {//对获取的链接数组进行遍历请求
  superagent.get(ele).end(function(err,sres){
    ep.emit('countnum',sres.text);//触发计数器countnum,
  })
});
ep.after('countnum',urlArr.length,function(datas){//监听计数器countnum,当次数达到urlArr.length时触发回调,datas为所有触发countnum时的参数sres.text集合
  datas = datas.map(function(dom){
  var $ = cheerio.load(dom);//每个页面的dom结构
  return ({
    title:$('.markdown-body h1').html()
  })
})
console.log(datas)
res.setHeader('content-type', 'text/html;charset=gb2312');//指定响应编码,否则乱码
res.send(datas);//发送到页面显示
})
 
 
});
}).listen(3000);

转载于:https://www.cnblogs.com/92xcd/p/9635761.html

你可能感兴趣的文章
修改 Vultr 登录密码
查看>>
CSS学习
查看>>
Centos 安装lnmp完整版
查看>>
【转】Eclipse和PyDev搭建完美Python开发环境(Ubuntu篇)
查看>>
Differences between page and segment
查看>>
字符串之strcmp
查看>>
最长公共子序列(不连续)
查看>>
微服务:Java EE的拯救者还是掘墓人?
查看>>
如何在Centos里面,把.net core程序设为开机自启动
查看>>
1920*1080pc端适配
查看>>
Nutch系列1:简介
查看>>
前端UI框架选择区别对比推荐
查看>>
栈 队列 和 双向队列
查看>>
从垃圾回收看闭包
查看>>
Intel Core Microarchitecture Pipeline
查看>>
如何去除交叉表的子行(列)的小计?
查看>>
Web字体(链接)嵌入
查看>>
switch… case 语句的用法
查看>>
day07补充-数据类型总结及拷贝
查看>>
语言、数据和运算符
查看>>