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

(0)

相关推荐

  • nodejs URL模块操作URL相关方法介绍

    url模块 处理HTTP请求时url模块使用率超高,因为该模块允许解析URL.生成URL,以及拼接URL.首先我们来看看一个完整的URL的各组成部分. 复制代码 代码如下: href  -----------------------------------------------------------------                             host              path                       --------------- --

  • Node.js中HTTP模块与事件模块详解

    Node.js的http服务器 通过使用HTTP模块的低级API,Node.js允许我们创建服务器和客户端.刚开始学node的时候,我们都会遇到如下代码: 复制代码 代码如下: var http = require('http'); http.createServer(function (req,res) {     res.end('Hello World\n'); }).listen(3000,"127.0.0.1"); console.log("Server funni

  • node.js中http模块和url模块的简单介绍

    前言 本文主要给大家介绍了关于node.js中http模块与url模块的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.http模块的简单介绍 node.js当中的http内置模块可以用于创建http服务器与http客户端. 1.引包 const http = require('http'); 2.创建http服务器 var server = http.createServer((req,res)=>{ }); 使用http的.createServer()方法可以

  • nodejs入门教程四:URL相关模块用法分析

    本文实例讲述了nodejs入门教程之URL相关模块用法.分享给大家供大家参考,具体如下: 1.URL 模块:用于 URL 处理与解析 1)URI 与 URL : URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源. URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate(定位)这个资源. 2)URL模块中的方法: ① url.format(ur

  • NodeJS学习笔记之Http模块

    一,开篇分析 首先"Http"这个概念大家应该比较熟悉了,它不是基于特定语言的,是一个通用的应用层协议,不同语言有不同的实现细节,但是万变不离其宗,思想是相同的, NodeJS作为一个宿主运行环境,以JavaScript为宿主语言,它也有自己实现的一套标准,这篇文章我们就一起来学习一下 "Http模块" .但是作为前提来说, 希望大家可以先阅读一下官网提供的api,有一个前置了解,这样就方便多了,以下是Http部分的api概览: 复制代码 代码如下: HTTP   

  • nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例

    http模块内部封装了http服务器和客户端,因此Node.js不需要借助Apache.IIS.Nginx.Tomcat等传统HTTP服务器,就可以构建http服务器,亦可以用来做一些爬虫.下面简单介绍该模块的使用,其具体API,大家可以自行去nodejs官方文档查看. 1.http.Server服务器 使用http.createServer([requestListener])方法创建一个http服务器,该方法返回一个新的http.Server实例,如果指定了requestListener,则

  • node.js 核心http模块,起一个服务器,返回一个页面的实例

    如下所示: let http=require("http"); //引入核心http模块 let fs=require("fs"); let mime={ '.js':'application/javascript', '.css':'text/css' } //创建一个函数,req代表客户端,res代表服务器可写流 let listener=(req,res)=>{ //res是可写流,有write和end if(req.url==="/"

  • NodeJS学习笔记之(Url,QueryString,Path)模块

    一,开篇分析 这篇文章把这三个模块拿来一起说,原因是它们各自的篇幅都不是很长,其次是它们之间存在着依赖关系,所以依次介绍并且实例分析.废话不多说了,请看下面文档: (1),"Url模块" 来个小栗子: 复制代码 代码如下: var url = require('url');  var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ;  console.log(typeof

  • 深入理解Node.js的HTTP模块

    前言 我们知道传统的HTPP服务器会由Aphche.Nginx.IIS之类的软件来担任,但是nodejs并不需要,nodejs提供了http模块,自身就可以用来构建服务器,而且http模块是由C++实现的,性能可靠.其中封装了一个高校的HTTP服务器和一个简单的HTTP客户端.http.Server是一个基于事件的HTTP服务器:http.request则是一个HTTP客户端工具,用于向HTTP服务器发送请求,实现内容抓取. 一. HTTP服务器 http.Server提供一套封装级别很低的AP

  • 深入浅析Nodejs的Http模块

    一.http服务器 我们知道传统的HTTP服务器是由Aphche.Nginx.IIS之类的软件来搭建的,但是Nodejs并不需要,Nodejs提供了http模块,自身就可以用来构建服务器,例如: var http = require("http"); http.createServer(function(req,res) { res.writeHead(200,{ "content-type":"text/plain" }); res.write

随机推荐