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 06 Javascript
js获取input标签的输入值实现代码
Aug 05 Javascript
PHP中CURL的几个经典应用实例
Jan 23 Javascript
HTML页面,测试JS对C函数的调用简单实例
Aug 09 Javascript
Angular企业级开发——MVC之控制器详解
Feb 20 Javascript
JavaScript中立即执行函数实例详解
Nov 04 Javascript
JavaScript实现多态和继承的封装操作示例
Aug 20 Javascript
vue最简单的前后端交互示例详解
Oct 11 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
Jul 29 Javascript
JavaScript对JSON数组简单排序操作示例
Jan 31 Javascript
原生javascript制作的拼图游戏实现方法详解
Feb 23 Javascript
django简单的前后端分离的数据传输实例 axios
May 18 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
PHP内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
js类中的公有变量和私有变量
2008/07/24 Javascript
从数组中随机取x条不重复数据的JS代码
2013/12/24 Javascript
node.js中的Socket.IO使用实例
2014/11/04 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
2017/11/27 Javascript
让你5分钟掌握9个JavaScript小技巧
2018/06/09 Javascript
vue框架搭建之axios使用教程
2018/07/11 Javascript
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
了解JavaScript中的选择器
2019/05/24 Javascript
详解JavaScript中的坐标和距离
2019/05/27 Javascript
vue input输入框关键字筛选检索列表数据展示
2020/10/26 Javascript
深入理解JS异步编程-Promise
2019/06/03 Javascript
Vue项目中使用flow做类型检测的方法
2020/03/18 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
2020/11/11 Javascript
[49:42]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第一局
2016/03/04 DOTA
python 判断一个进程是否存在
2009/04/09 Python
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
Django之编辑时根据条件跳转回原页面的方法
2019/08/21 Python
Python sep参数使用方法详解
2020/02/12 Python
TensorFlow使用Graph的基本操作的实现
2020/04/22 Python
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
HTML利用九宫格原理进行网页布局
2020/03/13 HTML / CSS
nohup的用法
2012/11/26 面试题
小区门卫值班制度
2014/01/24 职场文书
小学生国旗下演讲稿
2014/04/25 职场文书
文明市民先进事迹
2014/05/15 职场文书
村级四风对照检查材料
2014/08/24 职场文书
幼儿园六一活动总结
2014/08/27 职场文书
加薪申请书应该这样写!
2019/07/04 职场文书
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang