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 相关文章推荐
bgsound 背景音乐 的一些常用方法及特殊用法小结
May 11 Javascript
浏览器兼容console对象的简要解决方案分享
Oct 24 Javascript
node.js中的fs.utimesSync方法使用说明
Dec 15 Javascript
js实现touch移动触屏滑动事件
Apr 17 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
Apr 29 Javascript
angular+ionic 的app上拉加载更新数据实现方法
Jan 16 Javascript
vue组件父与子通信详解(一)
Nov 07 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
Sep 04 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
Jan 06 Javascript
Vue基本使用之对象提供的属性功能
Apr 30 Javascript
vue2和vue3的v-if与v-for优先级对比学习
Oct 10 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
Mar 01 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
收音机频率指针指示不准确和灵敏度低问题
2021/03/02 无线电
php 计算两个时间戳相隔的时间的函数(小时)
2009/12/18 PHP
PHP逐行输出(ob_flush与flush的组合)
2012/02/04 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
2020/05/02 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
斜45度寻路实现函数
2009/08/20 Javascript
jquery中动态效果小结
2010/12/16 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
javascript中加号(+)操作符的一些神奇作用
2014/06/06 Javascript
js仿腾讯QQ的web登陆界面
2016/08/19 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
Vue.js第四天学习笔记
2016/12/02 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
2018/10/10 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
2019/11/01 Javascript
Python ORM框架SQLAlchemy学习笔记之关系映射实例
2014/06/10 Python
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
2018/07/02 Python
Python实现bilibili时间长度查询的示例代码
2020/01/14 Python
利用Python计算KS的实例详解
2020/03/03 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
详解CSS3 Media Queries中媒体属性的使用
2016/02/29 HTML / CSS
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
PHP面试题及答案二
2015/05/23 面试题
销售会计工作职责
2013/12/02 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
团结演讲稿范文
2014/05/23 职场文书
工程学毕业生自荐信
2014/06/14 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
2014年机关工会工作总结
2014/12/19 职场文书
全国法制宣传日活动总结
2015/05/05 职场文书
微观世界观后感
2015/06/10 职场文书
小学教师见习总结
2015/06/23 职场文书
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL