node.js基础模块http、网页分析工具cherrio实现爬虫_node.js

一、前言
      说是爬虫初探,其实并没有用到爬虫相关第三方类库,主要用了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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索node.js基础模块http
node.js爬虫
nodejs 爬虫模块、cherrio、cherriojs、nodejs 爬虫、node 爬虫,以便于您获取更多的相关知识。

时间: 2024-11-09 00:44:32

node.js基础模块http、网页分析工具cherrio实现爬虫_node.js的相关文章

Node.js抓取中文网页乱码问题和解决方法_node.js

Node.js 抓取非 utf-8 的中文网页时会出现乱码问题,比如网易的首页编码是 gb2312,抓取时会出现乱码 复制代码 代码如下: var request = require('request')  var url = 'http://www.163.com' request(url, function (err, res, body) {      console.log(body) }) 可以使用 iconv-lite 来解决 安装 复制代码 代码如下: npm install ic

20个最好的实时网页分析工具

1. Google Analytics  Google Analytics现在也提供实时报告了,你可以查看目前网站上有多少访客,他们正在看哪些页面,他们从哪里来的等等. 2. Clicky Clicky 提供了非常好的实时分析工具.它也提供了手机版本 ClickyTouch. 3. Woopra  Woopra可以让你看到当前访客是如何在跟网站互动.你甚至可以通过Woopra Widget和他们聊天. 4. Chartbeat http://chartbeat.com/ Chartbeat 针对

node+experss实现爬取电影天堂爬虫_node.js

上周写了一个node+experss的爬虫小入门.今天继续来学习一下,写一个爬虫2.0版本. 这次我们不再爬博客园了,咋玩点新的,爬爬电影天堂.因为每个周末都会在电影天堂下载一部电影来看看. talk is cheap,show me the code! 抓取页面分析 我们的目标: 1.抓取电影天堂首页,获取左侧最新电影的169条链接 2.抓取169部新电影的迅雷下载链接,并且并发异步抓取. 具体分析如下: 1.我们不需要抓取迅雷的所有东西,只需要下载最新发布的电影即可,比如下面的左侧栏.一共有

利用Node.js制作爬取大众点评的爬虫_node.js

前言 Node.js天生支持并发,但是对于习惯了顺序编程的人,一开始会对Node.js不适应,比如,变量作用域是函数块式的(与C.Java不一样):for循环体({})内引用i的值实际上是循环结束之后的值,因而引起各种undefined的问题:嵌套函数时,内层函数的变量并不能及时传导到外层(因为是异步)等等. 一. API分析 大众点评开放了查询餐馆信息的API,这里给出了城市与cityid之间的对应关系, 链接:http://m.api.dianping.com/searchshop.json

Node.js配合node-http-proxy解决本地开发ajax跨域问题_node.js

情景: 前后端分离,本地前端开发调用接口会有跨域问题,一般有以下3种解决方法: 1. 后端接口打包到本地运行(缺点:每次后端更新都要去测试服下一个更新包,还要在本地搭建java运行环境,麻烦) 2. CORS跨域:后端接口在返回的时候,在header中加入'Access-Control-Allow-origin':* 之类的(有的时候后端不方便这样处理,前端就蛋疼了) 3. 用nodejs搭建本地http服务器,并且判断访问接口URL时进行转发,完美解决本地开发时候的跨域问题.  用到的技术:

node.js连接mongoDB数据库 快速搭建自己的web服务_node.js

一.写在前面   人人都想成为全栈码农,作为一个web前端开发人员,通往全栈的简洁之路,貌似就是node.js了.前段时间学习了node.js,来谈谈新手如何快速的搭建自己的web服务,开启全栈之路. 二.安装node.js   接触过后端开发的人都知道,首先要安装服务.作为新手,肯定是选择最简单的可视化安装了(傻瓜式下一步,其它的方式等熟悉相关操作后自然就会了的),通过官网http://nodejs.org/dist/v0.6.1/node-v0.6.1.msi 下载电脑适配的安装包(这个是w

使用node.js中的Buffer类处理二进制数据的方法_node.js

前言 在Node.js中,定义了一个Buffer类,该类用来创建一个专门存放二进制数据的缓存区.这篇文章就详细介绍了node.js中的Buffer类处理二进制数据的方法,下面话不多说,来看看详细的介绍. 创建Buffer对象 第一种:直接使用一个数组来初始化缓存区 var arr = [0,1,2] var buf = new Buffer(arr) console.log(buf) 执行效果: 第二种:直接使用一个字符串来初始化缓存区 var str = 'hello' var buf = n

node.js中module.exports与exports用法上的区别_node.js

 Node.js 引入了模块(Module)概念,一个模块可以通过module.exports 或 exports 将函数.变量等导出,以使其它 JavaScript 脚本通过require() 函数引入并使用. module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {},exports 是指向的 module.exports 的引用,在模块内部大概是这样: exports = module.exports = {}; 举个栗子,在node.js中创建模块非常

Node.js实用代码段之获取Buffer对象字节长度_node.js

我们知道Node.js框架下的Buffer对象能够对二进制数据提供很好的支持,那么获取一个Buffer对象真实的字节长度则是必须要用到的功能了.Node.js框架为开发人员提供了一个Buffer.byteLength()方法,下面我们借助一个官方文档提供的例程向读者演示一下该方法的使用过程. 本例ch04.buffer-byteLength.js主要代码如下: /** * ch04.buffer-byteLength.js */ console.info("------Buffer.byteLe