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 相关文章推荐
splice slice区别
Oct 09 Javascript
window.ActiveXObject使用说明
Nov 08 Javascript
javascript代码编写需要注意的7个小细节小结
Sep 21 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
Aug 14 Javascript
js函数在frame中的相互调用详解
Mar 03 Javascript
JavaScript设计模式之外观模式实例
Oct 10 Javascript
jquery实现侧边弹出的垂直导航
Dec 09 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
Mar 03 Javascript
浅谈JS对象添加getter与setter的5种方法
Jun 09 Javascript
vue .sync修饰符的使用详解
Jun 15 Javascript
基于ant design日期控件使用_仅月份的操作
Oct 27 Javascript
Vue OpenLayer测距功能的实现
Apr 20 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
把77A收信机改造成收音机
2021/03/02 无线电
php 远程关机操作的代码
2008/12/05 PHP
yii2中使用Active Record模式的方法
2016/01/09 PHP
CI框架数据库查询之join用法分析
2016/05/18 PHP
基于php编程规范(详解)
2017/08/17 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
2013/11/21 Javascript
document.forms用法示例介绍
2014/06/26 Javascript
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
jquery-tips悬浮提示插件分享
2015/07/31 Javascript
原生JS实现轮播效果+学前端的感受(防止走火入魔)
2016/08/21 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
2016/11/22 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
使用Bootrap和Vue实现仿百度搜索功能
2017/10/26 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
JS执行控制之节流模式实例分析
2018/12/21 Javascript
python生成指定长度的随机数密码
2014/01/23 Python
python列表操作实例
2015/01/14 Python
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
Python学习笔记之解析json的方法分析
2017/04/21 Python
在cmder下安装ipython以及环境的搭建
2018/10/19 Python
python3.6.3转化为win-exe文件发布的方法
2018/10/31 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
2019/01/11 Python
Python切图九宫格的实现方法
2019/10/10 Python
Python如何通过百度翻译API实现翻译功能
2020/04/02 Python
Django之腾讯云短信的实现
2020/06/12 Python
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
Booking.com荷兰:全球酒店网上预订
2017/08/22 全球购物
Christys’ Hats官网:英国帽子制造商
2018/11/28 全球购物
优秀教师先进事迹
2014/01/22 职场文书
心理健康教育制度
2014/01/27 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
2015年勤工助学工作总结
2015/04/29 职场文书
慰问信(范文3篇)
2019/10/23 职场文书