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 相关文章推荐
jquery checkbox,radio是否选中的判断代码
Mar 20 Javascript
HTML Dom与Css控制方法
Oct 25 Javascript
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
May 24 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
Jul 03 Javascript
只需一行代码,轻松实现一个在线编辑器
Nov 12 Javascript
jquery实现简单易懂的图片展示小例子
Nov 21 Javascript
AngularJs实现ng1.3+表单验证
Dec 10 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
May 04 Javascript
VUE JS 使用组件实现双向绑定的示例代码
Jan 10 Javascript
webpack项目轻松混用css module的方法
Jun 12 Javascript
JavaScript变量作用域及内存问题实例分析
Jun 10 Javascript
一分钟学会JavaScript中的try-catch
Dec 14 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
ThinkPHP关联模型操作实例分析
2012/09/23 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
JS 实现双色表格实现代码
2009/11/24 Javascript
jquery获取div距离窗口和父级dv的距离示例
2013/10/10 Javascript
js实现文章文字大小字号功能完整实例
2014/11/01 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
javascript闭包(Closure)用法实例简析
2015/11/30 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
jQuery遍历DOM节点操作之filter()方法详解
2016/04/14 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
jQuery实现的表格展开伸缩效果实例
2016/09/07 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
js和jquery中获取非行间样式
2017/05/05 jQuery
BootStrap数据表格实例代码
2017/09/13 Javascript
Vue2.0学习之详解Vue 组件及父子组件通信
2017/12/12 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
vue加载完成后的回调函数方法
2018/09/07 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
layer 关闭指定弹出层的例子
2019/09/25 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
python读写csv文件实例代码
2019/07/05 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
详解html5 canvas 微信海报分享(个人爬坑)
2018/01/12 HTML / CSS
对祖国的寄语大全
2014/04/11 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
民族学专业求职信
2014/07/28 职场文书
2014年财政工作总结
2014/12/10 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
六年级作文之自救
2019/12/19 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python