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 相关文章推荐
分享20多个很棒的jQuery 文件上传插件或教程
Sep 04 Javascript
jquery 设置元素相对于另一个元素的top值(实例代码)
Nov 06 Javascript
js单例模式详解实例
Nov 21 Javascript
JS+CSS实现可以凹陷显示选中单元格的方法
Mar 02 Javascript
JavaScript使用setTimeout实现延迟弹出警告框的方法
Apr 07 Javascript
浅谈JavaScript中null和undefined
Jul 09 Javascript
TypeScript Type Innference(类型判断)
Mar 10 Javascript
Javascript中的对象和原型(二)
Aug 12 Javascript
Angular1.x自定义指令实例详解
Mar 01 Javascript
jQuery响应滚动条事件功能示例
Oct 14 jQuery
webstorm添加*.vue文件支持
May 08 Javascript
使用vue2.0创建的项目的步骤方法
Sep 25 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反弹shell实现代码
2009/04/22 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
PHP实现截取中文字符串不出现?号的解决方法
2016/12/29 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
限制文本框输入N个字符的js代码
2010/05/13 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
JavaScript运行时库属性一览表
2014/03/14 Javascript
JS获得图片alt信息的方法
2015/04/01 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
react native 获取地理位置的方法示例
2018/08/28 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
一文了解Vue中的nextTick
2019/05/06 Javascript
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
Vue项目打包部署到apache服务器的方法步骤
2021/02/01 Vue.js
django admin 后台实现三级联动的示例代码
2018/06/22 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
python实现杨氏矩阵查找
2019/03/02 Python
在Tensorflow中查看权重的实现
2020/01/24 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
字中字效果的实现【html5实例】
2016/05/03 HTML / CSS
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
自荐书模板
2013/12/15 职场文书
旷课检讨书3000字
2014/02/04 职场文书
人事科岗位职责范本
2014/03/02 职场文书
财务人员的自我评价范文
2014/03/03 职场文书
求职简历自我评价范例
2014/03/12 职场文书
本科毕业论文导师评语
2014/12/31 职场文书
爱心募捐感谢信
2015/01/22 职场文书
文明礼仪倡议书
2015/04/28 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技