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

实现需求抓取课程数据,输入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. Shuffle过程

    Shuffle过程 在MapReduce框架中,shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整 ...

  2. java 开发 websocket 网页端聊天室

    博客地址:https://ainyi.com/67 WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端. ...

  3. lua的table元类

    Lua中提供的元表是用于帮助Lua数据变量完成某些非预定义功能的个性化行为,如两个table的相加.假设a和b都是table,通过元表可以定义如何计算表达式a+b.当Lua试图将两个table相加时, ...

  4. [转]USDT与omniCore钱包

    本文转自:http://www.cnblogs.com/red-evil/p/10039740.html USDTUSDT,又称为泰达币,是由Tether公司在 2015年推出的一种与美元锚定的加密货 ...

  5. Chrome插件开发,美化网页上的文件列表。chrome-extension,background

    上一篇文章 通过“content-scripts”的方式向页面注入js和css来美化页面,但是有一个弊端:一旦配置好需要注入的页面,之后如果这个页面地址以后发生变化,或者要新加一些URL进来,那么得修 ...

  6. 从零开始学安全(七)●Linux基础命令学习笔记

    halt 关机reboot 现在重新启动su - 如果当前是普通用户,则输入这条命令切换到管理员用户(root),如果要切换到其他用户则敲入 su - 用户名 如: su - wangxin root ...

  7. C#窗体加载和控件加载不同步导致控件闪烁

    窗体加载和控件加载不同步导致的控件闪烁现象:// 代码块加在父窗体中的任意位置,解决窗体加载和控件加载不同步导致的控件闪烁问题        protected override CreatePara ...

  8. Java马士兵高并发编程视频学习笔记(二)

    1.ReentrantLock的简单使用 Reentrant n.再进入 ReentrantLock 一个可重入互斥Lock具有与使用synchronized方法和语句访问的隐式监视锁相同的基本行为和 ...

  9. Angular6 组件树结构优化

    本片博客主要是记录实际项目开发中使用Angular6框架,遇到的一个问题. 现象: Angular6框架写的前端web网页,在实际部署运行过程中遇到了一种现象,引入懒加载以后,加载登录面速度很快,但是 ...

  10. 关于购物车添加按钮的动画(vue.js)

    来自:https://segmentfault.com/a/1190000009294321 (侵删) git 源码地址  https://github.com/ustbhuangyi/vue-sel ...