node.js实现爬虫教程

 更新时间:2020年08月25日 09:57:19   作者:garfieldzf  
这篇文章主要为大家介绍了node.js基础模块http、网页分析工具cherrio实现爬虫的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

一、前言

说是爬虫初探,其实并没有用到爬虫相关第三方类库,主要用了node.js基础模块http、网页分析工具cherrio。 使用http直接获取url路径对应网页资源,然后使用cherrio分析。 这里我主要学习过的案例自己敲了一遍,加深理解。在coding的过程中,我第一次把jq获取后的对象直接用forEach遍历,直接报错,是因为jq没有对应的这个方法,只有js数组可以调用。

二、知识点

①:superagent抓去网页工具。我暂时未用到。
②:cherrio 网页分析工具,你可以理解其为服务端的jQuery,因为语法都一样。

效果图

1、抓取整个网页

2、分析后的数据,提供的示例为案例实现的例子。

爬虫初探源码分析

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 2014年最火的Node.JS后端框架推荐

    2014年最火的Node.JS后端框架推荐

    用nodejs开发web应用,用哪个框架好?express?还是其他什么?今天小编就来给大家推荐一下今年最好用的几款Node.js后端框架
    2014-10-10
  • 基于Alpine Linux构建前端node-web镜像步骤详解

    基于Alpine Linux构建前端node-web镜像步骤详解

    这篇文章主要为大家介绍了基于Alpine Linux构建前端node-web镜像步骤详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • node中的__filename和__dirname的使用详解

    node中的__filename和__dirname的使用详解

    本文主要介绍了node中的__filename和__dirname的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 关于npm主版本升级及其相关知识点总结

    关于npm主版本升级及其相关知识点总结

    npm是Node.js默认的包管理器,以javascript 编写的软件包管理系统用于分享和使用代码,下面这篇文章主要给大家介绍了关于npm主版本升级及其相关知识点总结的相关资料,需要的朋友可以参考下
    2022-12-12
  • nodejs获取本机内网和外网ip地址的实现代码

    nodejs获取本机内网和外网ip地址的实现代码

    这篇文章主要介绍了nodejs获取本机内网和外网ip地址的实现代码,需要的朋友可以参考下
    2014-06-06
  • node.js中使用q.js实现api的promise化

    node.js中使用q.js实现api的promise化

    这篇文章主要介绍了node.js中使用q.js实现api的promise化,promise一个标准,它描述了异步调用的返回结果,包括正确返回结果和错误处理,需要的朋友可以参考下
    2014-09-09
  • node.js入门学习之url模块

    node.js入门学习之url模块

    最近在学习nodejs,知道了如何用nodejs创建一个简单的小项目。例如如何创建一个服务器啦,例如http.createServer,还有根据不同的请求路径来设置路由选择啦,模块引入,创建模块啦,下面这篇文章主要介绍了node.js中url模块的相关资料,需要的朋友可以参考下。
    2017-02-02
  • 解决nodejs报错Error:EPERM:operation not permitted,mkdir‘xxxxxxxxxxxxxxxx‘

    解决nodejs报错Error:EPERM:operation not permitted,mkdi

    这篇文章主要介绍了解决nodejs报错Error:EPERM:operation not permitted,mkdir‘xxxxxxxxxxxxxxxx‘问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • node.js中get和post接口教程

    node.js中get和post接口教程

    这篇文章主要介绍了node.js中get和post接口学习,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • 使用socket.io实现简单聊天室案例

    使用socket.io实现简单聊天室案例

    这篇文章主要介绍了使用socket.io实现简单聊天室案例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01

最新评论