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

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

爬虫:把网页爬下来(发送http请求,保存返回的结果,一般是html),分析html拿到有用数据。

一、获取页面源码

拿到http://www.imooc.com/learn/348的源码【日期20170329】

var http=require('http');var url='http://www.imooc.com/learn/348';http.get(url,function(res){        var html='';        res.on('data',function    (data){            html+=data;        })        res.on('end',function(){                console.log(html);        });}).on('error',function(){    console.log('获取课程数据出错');});

2、分析获取html中有用数据

先安装一个模块cheerio,cheerio可以理解成一个 Node.js 版的 jquery。

npm install cheerio

var http=require('http');var cheerio=require('cheerio');var url='http://www.imooc.com/learn/348';//分析用cheerio模块function filterChapters(html){    var $=cheerio.load(html);    var chatpers=$('.chapter');//所有章节的数组/*//期望的数据结构    [{        chapterTitle:'',        videos:[            title:'',            id:''        ]    }]*/    var courseData=[];    chatpers.each(function(item){        var chapter=$(this);        var chapterTitle=chapter.find('strong').text();        videos=chapter.find('.video').children('li');        var chapterData={            chapterTitle:chapterTitle,            videos:[]        };        videos.each(function(item){            var video=$(this).find('.J-media-item');            var videoTitle=video.text();            var id=video.attr('href').split('video/')[1];            chapterData.videos.push({                title:videoTitle,                id:id            })        })        courseData.push(chapterData);    })    return courseData;}/*打印方法*/function printCourseInfo(courseData){    courseData.forEach(function(item){        var chapterTitle=item.chapterTitle;        console.log(chapterTitle+'\n');        item.videos.forEach(function(item){            console.log('【'+item.id+'】'+item.title+'\n');        })    })}http.get(url,function(res){        var html='';        res.on('data',function    (data){            html+=data;        })        res.on('end',function(){            var courseData=filterChapters(html);            printCourseInfo(courseData);        });}).on('error',function(){    console.log('获取课程数据出错');});

 

本文作者,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:有问题欢迎与我讨论,共同进步。

你可能感兴趣的文章
Android Gradle Plugin指南(四)——測试
查看>>
美图秀秀DBA谈MySQL运维及优化
查看>>
Windows下搭建Git开发环境
查看>>
小数化分数2(分数化小数)
查看>>
Android自适应不同屏幕几种方法
查看>>
ThinkPHP运算符 与 SQL运算符 对比表
查看>>
用ESP8266+android,制作自己的WIFI小车(ESP8266篇)
查看>>
Redis集群方案之使用豌豆荚Codis搭建(待实践)
查看>>
SpringCloud的服务注册中心(三) - 进一步了解 Eureka
查看>>
matlab中常用的函数
查看>>
利用SpringCloud搭建一个最简单的微服务框架
查看>>
ubuntu 16.04 安装pycharm
查看>>
Universal USB Installer – Easy as 1 2 3
查看>>
php switch case语句用法
查看>>
docker探索-docker容器基本操作(五)
查看>>
spring boot 中logback多环境配置
查看>>
CTF---Web入门第十二题 程序逻辑问题
查看>>
当ThreadLocal碰上线程池
查看>>
子类构造方法
查看>>
关于Spring中的<context:annotation-config/>配置
查看>>