记得之前就听说过爬虫,个人初步理解就是从网页中抓取一些有用的数据,存储到本地,今天就当是小牛试刀,拿来溜溜......

实现需求抓取课程数据,输入url后并在浏览器端以一定的数据格式显示出来(如下图所示)

实现需求需用到的Node库介绍

cheerio(https://github.com/cheeriojs/cheerio )  可以理解成一个 Node.js 版的 jquery,用来从网页中以 css selector 取数据,使用方式跟 jquery 一样一样的。

superagent(http://visionmedia.github.io/superagent/ ) 是个轻量的的 http 方面的库,是nodejs里一个非常方便的客户端请求代理模块,当我们需要进行 get 、 post 、 head 等网络请求时

express(http://www.expressjs.com.cn/starter/) 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,路由、express生成器、静态文件等。

实现需求源代码如下

package.json

npm init生成package.json配置文件

devDependencies、dependencies 依赖组件

{
"name": "package.json",
"version": "1.0.0",
"description": "",
"main": "app.js",
"dependencies": {
"cheerio": "^0.22.0"
},
"devDependencies": {
"express": "^4.15.2",
"superagent": "^3.5.0"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Avenstar",
"license": "ISC"
}

crawler.js

var express = require('express'),
app = express(),//基于WEB平台的开发框架
superagent = require("superagent"),//处理服务端/客户端的http请求
cheerio=require('cheerio');//一个 Node.js 版的 jquery,用来从网页中以 css selector 取数据,使用方式跟 jquery 一样
var pathUrl='http://www.imooc.com/learn/348'; /*=========================================================================
|抓取data数据结构如下
| var courseData = [{
| 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().replace(/(\s*)/g,''); //找到章节标题
var videos=chapter.find('.video').children('li'); var chapterData={
chapterTitle:chapterTitle,
videos:[]
}; //videos
videos.each(function(item){
var $that = $(this),
video=$that.find('.J-media-item'),
title=video.text().replace(/(\s*)/g,'');
id=video.attr('href').split('/video')[1].replace(/(\s*)/g,'').replace('/','');
chapterData.videos.push({
title:title,
id:id
})
})
courseData.push(chapterData);
});
return courseData;
}
/*==========================================================================
| GET method route
===========================================================================*/
app.get('/', function(request, respones){
//处理服务端/客户端的http请求
superagent.get(pathUrl).end(function(error, sres){
//error
if(error){
return next(err);
}
//抓取https网址html
var html = sres.text;
var courseData=filterChapter(html);
//打印
printCourseInfo(courseData);
//respones
respones.send((courseData));
})
})
/*==========================================================================
| listening at port
===========================================================================*/
app.listen(9090, function(){
console.log('app is listening at port 9090');
});

资料参考

 http://www.imooc.com/video/7965

http://www.cnblogs.com/coco1s/p/4954063.html

https://github.com/alsotang/node-lessons

作者:Avenstar

出处:http://www.cnblogs.com/zjf-1992/p/6548220.html

关于作者:专注于前端开发

本文版权归作者所有,转载请标明原文链接

Node爬虫之初体验的更多相关文章

  1. node.js + express 初体验【hello world】

    [node.js]  一个神奇的XX 呵呵 :) 不知道怎么形容他才好! [express] 是node.js 开发web应用程序的框架 开发环境:XP 大家共同进步吧 :) 一:前期准备: 1:下载 ...

  2. Node.js入门初体验

    今天有一个类似网络爬虫的需求,本来打算用我还算熟悉的asp或者asp.NET来做这个事情,但是写了这么长时间js,asp的语法实在不喜欢,VS又早被我卸掉了,思来想去打算用一下最近比较火的Node.j ...

  3. node+express+mongodb初体验

    从去年11月份到现在,一直想去学习nodejs,在这段时间体验了gulp.grunt.yeomen,fis,但是对于nodejs深入的去学习,去开发项目总是断断续续. 今天花了一天的时间,去了解整理整 ...

  4. Node.js 安装 初体验(1)

    1.安装nodejs http://nodejs.org/download/  自动根据系统下载自己的版本node.js 2.环境变量 windows 安装,不需要配置环境变量   mac安装后,会提 ...

  5. 【Node.js】初体验之安装和HelloWorld

    听说Node.js是个蛮吊的东东.中午休息时间有限,暂时看了下知道怎么安装和初步使用了. 1.安装: 到Node.js官网下载就可以了,才5M多点,双击后按步骤安装就可以了. 2."Hell ...

  6. Node.js 的初体验

    例子1: 1.首先第一步 :要 下载 node.js. 官网 上可以下载 下载完后,是这个玩意. 2. 打开 node.js ,然后输入 // 引入http模块 var http = require( ...

  7. 【Python3爬虫】爬取美女图新姿势--Redis分布式爬虫初体验

    一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...

  8. 【Python3爬虫】学习分布式爬虫第一步--Redis分布式爬虫初体验

    一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...

  9. Node.js 网页瘸腿爬虫初体验

    延续上一篇,想把自己博客的文档标题利用Node.js的request全提取出来,于是有了下面的初哥爬虫,水平有限,这只爬虫目前还有点瘸腿,请看官你指正了. // 内置http模块,提供了http服务器 ...

随机推荐

  1. c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错

    如果一个对象的值为null,那么它调用扩展方法时会报错吗? Person p = null ; p.ExtendMethod(); 上述代码出现的情况不会报错,刚开始遇到这种情况时很纳闷,就去问了大牛 ...

  2. c# 服务

    注:服务里的timer System.Timers.Timer time=new System.Timers.Timer();  time.Interval = 3000;  //设置计时器事件间隔执 ...

  3. [Linux] Nginx 提供静态内容和优化积压队列

    1.try_files指令可用于检查指定的文件或目录是否存在; NGINX会进行内部重定向,如果没有,则返回指定的状态代码.例如,要检查对应于请求URI的文件是否存在,请使用try_files指令和$ ...

  4. 【Java每日一题】20170223

    20170222问题解析请点击今日问题下方的“[Java每日一题]20170223”查看(问题解析在公众号首发,公众号ID:weknow619) package Feb2017; public cla ...

  5. Python 内置函数笔记

    其中有几个方法没怎么用过, 所以没整理到 Python内置函数 abs(a) 返回a的绝对值.该参数可以是整数或浮点数.如果参数是一个复数,则返回其大小 all(a) 如果元组.列表里面的所有元素都非 ...

  6. Docker多步构建更小的Java镜像

    译者按: 最新版Docker将支持多步构建(Multi-stage build),这样使用单个Dockerfile就可以定义多个中间镜像用于构建,测试以及发布等多个步骤,并且有效减小最终镜像的大小. ...

  7. 深入浅出LSTM神经网络

    转自:https://www.csdn.net/article/2015-06-05/2824880 LSTM递归神经网络RNN长短期记忆   摘要:根据深度学习三大牛的介绍,LSTM网络已被证明比传 ...

  8. Dynamics 365 Online-Unified User Interface

    为了加强界面的一致性,提高用户体验,Dynamics 365 Online V9发布了新的Interface:Unified User Interface. 区别于旧的Regular UI,UUI自适 ...

  9. Ne10编译安装

    介绍 NEON,即"ARM Advanced SIMD",是ARM从ARMv7开始提供的高级单指令多数据(SIMD)扩展.它是一种64/128位混合SIMD体系结构.NEON在网上 ...

  10. Android项目实战(三十三):AS下获取获取依赖三方的jar文件、aar 转 jar

    使用 Android studio 开发项目中,有几种引用三方代码的方式:jar 包 ,类库 ,gradle.build 的compile依赖. 大家会发现github上不少的项目只提供compile ...