zoukankan      html  css  js  c++  java
  • node 爬虫(-)

    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);


  • 相关阅读:
    C# 日志本地化工具
    javascript面向对象的写法01
    VM12-Pro 安装CentOS7 并配置静态IP出坑记
    基于CentOS7.x安装Nginx-1.18.0
    程序员思维导图、web初学者必备、web前端知识集锦-不断更新中...
    js知识
    swiper的使用
    web 移动端键盘处理-vue移动端那些事
    vue学习计划-vuex生态
    vue 组件复用
  • 原文地址:https://www.cnblogs.com/92xcd/p/9635761.html
Copyright © 2011-2022 走看看