• Node.js 爬虫初探


    前言

          在学习慕课网视频和Cnode新手入门接触到爬虫,说是爬虫初探,其实并没有用到爬虫相关第三方类库,主要用了node.js基础模块http、网页分析工具cherrio。 使用http直接获取url路径对应网页资源,然后使用cherrio分析。 这里我主要是把慕课网教学视频提供的案例自己敲了一边,加深理解。在coding的过程中,我第一次把jq获取后的对象直接用forEach遍历,直接报错,是因为jq没有对应的这个方法,只有js数组可以调用。

    知识点

        ①:superagent抓去网页工具。我暂时未用到。

        ②:cherrio 网页分析工具,你可以理解其为服务端的jQuery,因为语法都一样。

    效果图

    1、抓取整个网页

    2、分析后的数据, 我这里是以慕课网提供的示例为案例实现的例子。

    爬虫初探源码分析

    var http=require('http');
    var cheerio=require('cheerio');
    
    var url='http://www.imooc.com/learn/348';
    
    /****************************
    打印得到的数据结构
    [{
    	chapterTitle:'',
    	videos:[{
    		title:'',
    		id:''
    	}]
    }]
    ********************************/
    function printCourseInfo(courseData){
    	courseData.forEach(function(item){
    		var chapterTitle=item.chapterTitle;
    		console.log(chapterTitle+'
    ');
    		item.videos.forEach(function(video){
    			console.log(' 【'+video.id+'】'+video.title+'
    ');
    		})
    	});
    }
    
    
    /*************
    分析从网页里抓取到的数据
    **************/
    function filterChapter(html){
    	var courseData=[];
    
    	var $=cheerio.load(html);
    	var chapters=$('.chapter');
    	chapters.each(function(item){
    		var chapter=$(this);
    		var chapterTitle=chapter.find('strong').text(); //找到章节标题
    		var videos=chapter.find('.video').children('li');
    
    		var chapterData={
    			chapterTitle:chapterTitle,
    			videos:[]
    		};
    
    		videos.each(function(item){
    			var video=$(this).find('.studyvideo'); 
    			var title=video.text();
    			var id=video.attr('href').split('/video')[1];
    
    			chapterData.videos.push({
    				title:title,
    				id:id
    			})
    		})
    
    		courseData.push(chapterData);
    	});
    
        return courseData;
    }
    
    http.get(url,function(res){
    	var html='';
    
    	res.on('data',function(data){
    		html+=data;
    	})
    
    	res.on('end',function(){
    		var courseData=filterChapter(html);
    		printCourseInfo(courseData);
    	})
    }).on('error',function(){
    	console.log('获取课程数据出错');
    })
    

    参考资料

    https://github.com/alsotang/node-lessons/tree/master/lesson3

    http://www.imooc.com/video/7965

  • 相关阅读:
    jquery实现记住用户名和密码
    从mysql8.0.15升级到8.0.16
    mysql8.0.15二进制安装
    DML、DDL、DCL的分别是什么
    redis3.2.10单实例安装测试
    redis5.0.3单实例简单安装记录
    percona-xtrabackup快速安装及其简单使用
    pt-show-grants的用法
    Centos6安装Percona-tools工具
    sshpass-Linux命令之非交互SSH密码验证
  • 原文地址:https://www.cnblogs.com/sword-successful/p/5024579.html
Copyright © 2020-2023  润新知