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

node-day5 简易小爬虫 superagent+cheerio 的使用

时间:2018-04-19 10:35:50      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:使用   for   let   dex   title   selector   comment   fun   pos   

// 模块导入
var express = require(‘express‘);//导入express 模块
// const utility = require(‘utility‘);//提供了很多常用且比较杂的辅助方法,如 utility.md5() md5算法,用来加密
var eventproxy = require(‘eventproxy‘);
var superagent = require(‘superagent‘);//是个 http 方面的库,可以发起 get 或 post 请求。
var cheerio = require(‘cheerio‘); //Node.js 版的 jquery,用来从网页中以 css selector 取数据,使用方式跟 jquery 一样一样的。
var url = require("url"); //node.js自带
var app = express();//创建一个express实例 这样app上就有express中的各种方法了。如 get post put delete
app.get(‘/‘,function(req,res){
    superagent.get(‘https://cnodejs.org/‘).end(function(error,sres){
        if(error){
            return next(error);
        }
        // sres.text 存放着爬取的html内容
        var  $ = cheerio.load(sres.text);//将它传给 cheerio.load 之后 就可以得到一个实现了 jquery 接口的变量,我们习惯性地将它命名为 `$`
        var  jsonObj = [];
        var urlList = [];
        var baseUrl = "https://cnodejs.org/";
        $(‘#topic_list  .cell‘).each(function(index,item){
            item = $(item);
            var name = item.find(‘.user_avatar img‘).attr(‘title‘)
            var href = item.find(".topic_title").attr("href");
            var title = item.find(".topic_title").attr("title");
            href = url.resolve(baseUrl,href);//拼接完整的url地址
            urlList.push(href);
        })
        var eq = new eventproxy();
        eq.after(‘myEvent‘,urlList.length,function(data){
            //data是一个数组,当eq 监听的所有myEvent事件都完成了后开始往下走↓↓,这个时候data已经是一个把每次事件执行完后传递过来的数据拼接好的数组,所以 这个after 相当于一个计数器,记数次数为第二个参数
            // res.send(data);
            data = data.map(function(item){
                var $ = cheerio.load(item);//把返回的数据变成可以用选择器选择的对象
                return {
                    title: $(‘.topic_full_title‘).text().trim(),//获取title
                    comment1: $(‘.reply_content‘).eq(0).text().trim() //获取内容
                 }
            })
            res.send(data);
        });
        urlList.forEach(function(items){
            superagent.get(items).end(function(err,res){
                // console.log(res);
                eq.emit(‘myEvent‘,res.body)//告诉eq myEvent 事件做完了,并且把sres.text传递过去。
            })
        })
    })
})

// 监听端口
app.listen(3000,function(){
    console.log(‘成功‘);
})

爬虫爬一下。

node-day5 简易小爬虫 superagent+cheerio 的使用

标签:使用   for   let   dex   title   selector   comment   fun   pos   

原文地址:https://www.cnblogs.com/sisimu/p/8879863.html

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