node.js实现爬虫教程


Posted in Javascript onAugust 25, 2020

一、前言

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

二、知识点

①:superagent抓去网页工具。我暂时未用到。
②:cherrio 网页分析工具,你可以理解其为服务端的jQuery,因为语法都一样。

效果图

1、抓取整个网页

node.js实现爬虫教程

2、分析后的数据,提供的示例为案例实现的例子。

node.js实现爬虫教程

爬虫初探源码分析

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+'\n');
 item.videos.forEach(function(video){
 console.log(' 【'+video.id+'】'+video.title+'\n');
 })
 });
}
 
 
/*************
分析从网页里抓取到的数据
**************/
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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用js实现的抽象CSS圆角效果!!
May 03 Javascript
js+css实现增加表单可用性之提示文字
Jun 03 Javascript
JS实现的页面自定义滚动条效果
Oct 26 Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
Oct 26 Javascript
使用jquery给新生的th绑定hover事件的实例
Feb 10 Javascript
Vue.Draggable实现拖拽效果
Jul 29 Javascript
JS立即执行函数功能与用法分析
Jan 15 Javascript
node微信开发之获取access_token+自定义菜单
Mar 17 Javascript
微信小程序实现手势滑动效果
Aug 26 Javascript
基于vue和bootstrap实现简单留言板功能
May 30 Javascript
jQuery实现放大镜案例
Oct 19 jQuery
JavaScript模拟实现网易云轮播效果
Apr 04 Javascript
ES6中如何使用Set和WeakSet
Mar 10 #Javascript
解析javascript瀑布流原理实现图片滚动加载
Mar 10 #Javascript
javascript实现可键盘控制的抽奖系统
Mar 10 #Javascript
基于javascript制作微信聊天面板
Aug 09 #Javascript
关于Bootstrap弹出框无法调用问题的解决办法
Mar 10 #Javascript
TypeScript Type Innference(类型判断)
Mar 10 #Javascript
JavaScript File分段上传
Mar 10 #Javascript
You might like
我常用的几个类
2006/10/09 PHP
PHP中的日期及时间
2006/11/23 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
2016/06/29 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
Javascript UrlDecode函数代码
2010/01/09 Javascript
juqery 学习之三 选择器 子元素与表单
2010/11/25 Javascript
浅析Prototype的模板类 Template
2011/12/07 Javascript
JavaScript面向对象设计二 构造函数模式
2011/12/20 Javascript
javascript面向对象特性代码实例
2014/06/12 Javascript
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
JavaScript自定义等待wait函数实例分析
2015/03/23 Javascript
jQuery预加载图片常用方法
2015/06/15 Javascript
jQuery表单事件实例代码分享
2016/08/18 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
2016/09/17 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
Vue.js中该如何自己维护路由跳转记录
2019/05/19 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
python网络编程示例(客户端与服务端)
2014/04/24 Python
python中的错误处理
2016/04/10 Python
Python简单实现两个任意字符串乘积的方法示例
2018/04/12 Python
python Tkinter的图片刷新实例
2019/06/14 Python
Python @property及getter setter原理详解
2020/03/31 Python
使用python实现下载我们想听的歌曲,速度超快
2020/07/09 Python
python实现邮件循环自动发件功能
2020/09/11 Python
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
酷瑞网络科技面试题
2012/03/30 面试题
医院工作检讨书范文
2014/02/10 职场文书
五一手机促销方案
2014/03/08 职场文书
感恩老师演讲稿600字
2014/08/28 职场文书
如何签定毕业生就业协议书
2014/09/28 职场文书
生日宴会祝酒词
2015/08/10 职场文书
2019消防宣传标语!
2019/07/10 职场文书