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 相关文章推荐
用jscript实现新建和保存一个word文档
Jun 15 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
Nov 14 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
Sep 17 Javascript
Javascript中的高阶函数介绍
Mar 15 Javascript
基于jQuery Tipso插件实现消息提示框特效
Mar 16 Javascript
基于Vue2实现的仿手机QQ单页面应用功能(接入聊天机器人 )
Mar 30 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
Jul 22 jQuery
vue将对象新增的属性添加到检测序列的方法
Feb 24 Javascript
echarts鼠标覆盖高亮显示节点及关系名称详解
Mar 17 Javascript
javascript实现小型区块链功能
Apr 03 Javascript
Vue CLI3基础学习之pages构建多页应用
Jun 02 Javascript
ES6中new Function()语法及应用实例分析
Feb 19 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和XSL stylesheets转换XML文档
2006/10/09 PHP
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
php 邮件发送问题解决
2014/03/22 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
2014/09/27 PHP
使用PHP编写发红包程序
2015/07/22 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
php头像上传预览实例代码
2017/05/02 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
详解Laravel服务容器的绑定与解析
2019/11/05 PHP
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
2007/08/31 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
javascript 闭包
2011/09/15 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
实用的Jquery选项卡TAB示例代码
2013/08/28 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
jQuery实现可用于博客的动态滑动菜单
2015/03/09 Javascript
你不知道的高性能JAVASCRIPT
2016/01/18 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
2017/07/19 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
JavaScript实现图片上传并预览并提交ajax
2019/09/30 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
js实现简易拖拽的示例
2020/10/26 Javascript
python调用xlsxwriter创建xlsx的方法
2018/05/03 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
Python面向对象程序设计多继承和多态用法示例
2019/04/08 Python
Python openpyxl模块原理及用法解析
2020/01/19 Python
Python爬取网站图片并保存的实现示例
2021/02/26 Python
研究生导师推荐信
2015/03/25 职场文书
2015年采购员工作总结
2015/04/27 职场文书
请假条应该怎么写?
2019/06/24 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript