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 相关文章推荐
javascript面向对象编程代码
Dec 19 Javascript
Javascript实现页面跳转的几种方式分享
Oct 26 Javascript
extjs_02_grid显示本地数据、显示跨域数据
Jun 23 Javascript
js实现无缝循环滚动
Jun 23 Javascript
VueJs使用Amaze ui调整列表和内容页面
Nov 30 Javascript
浅谈Node.js 子进程与应用场景
Jan 24 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
May 31 Javascript
vue-自定义组件传值的实例讲解
Sep 18 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
Nov 01 Javascript
node.js开发辅助工具nodemon安装与配置详解
Feb 06 Javascript
对vuex中store和$store的区别说明
Jul 24 Javascript
vue+element UI实现树形表格
Dec 29 Vue.js
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
介绍几个array库的新函数 php
2006/12/29 PHP
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
2017/07/03 PHP
javascript concat数组累加 示例
2009/09/03 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
js判断文件格式及大小的简单实例(必看)
2016/10/11 Javascript
js操作浏览器的参数方法
2017/01/21 Javascript
json数据处理及数据绑定
2017/01/25 Javascript
浅谈mint-ui 填坑之路
2017/11/06 Javascript
javaScript 连接打印机,打印小票的实例
2017/12/29 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
node.js学习笔记之koa框架和简单爬虫练习
2018/12/13 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
express框架下使用session的方法
2019/07/31 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
python返回昨天日期的方法
2015/05/13 Python
Python文本相似性计算之编辑距离详解
2016/11/28 Python
通过PYTHON来实现图像分割详解
2019/06/26 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
django 读取图片到页面实例
2020/03/27 Python
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
动态密码技术
2012/10/18 面试题
服务员自我评价
2014/01/25 职场文书
教师自查自纠材料
2014/10/14 职场文书
邀请函格式范文
2015/02/02 职场文书
小学班主任自我评价
2015/03/11 职场文书
开展警示教育活动总结
2015/05/09 职场文书
企业法人代表证明书
2015/06/18 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
Win11安全功能升级:内置防网络钓鱼功能
2022/04/08 数码科技
Linux安装Docker详细教程
2022/07/07 Servers