基于node下的http小爬虫的示例代码


Posted in Javascript onJanuary 11, 2018

每时每刻不管你睡了还是没睡,互联网都会有海量的数据来来往往,有客服端到服务端,有服务端到服务端。http的get和request完成的角色即为数据的获取及提交,接下来我们动手写一个简单的小爬虫来爬爬菜鸟教程中关于node的章节的课程界面。

爬取Node.js 教程首页的所有数据

建立node-http.js,其中代码如下,代码中有详细的的注释,自行理解了哈

var http=require('http');//获取http模块
var url='http://www.runoob.com/nodejs/nodejs-tutorial.html';//定义node官网地址变量

http.get(url,function(res){
  var html='';

  // 这里将会触发data事件,不断触发不断跟新html直至完毕
  res.on('data',function(data){
    html +=data
  })

  // 当数据获取完成将会触发end事件,这里将会打印初node官网的html
  res.on('end',function(){
    console.log(html)
  })
}).on('error',function(){
  console.log('获取node官网相关数据出错')
})

终端执行结果中发现这个页面的html全部被爬下来了

G:\node\node-http> node node-http.js
<!Doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta property="qc:admins" content="465267610762567726375" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Node.js 教程 | 菜鸟教程</title>
<link rel='dns-prefetch' href='//s.w.org' />
<link rel="canonical" href="http://www.runoob.com/nodejs/nodejs-tutorial.html" />
<meta name="keywords" content="Node.js 教程,node,Node.js,nodejs">
<meta name="description" content="Node.js 教程  简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台
。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。  谁适合阅读本教程? 如果你是一个前端程序员,你不懂得像PHP、Python或Ruby等动态编程语言,..">
<link rel="shortcut icon" href="//static.runoob.com/images/favicon.ico" rel="external nofollow" rel="external nofollow" mce_href="//static.runoob.com/images/favicon.ico" rel="external nofollow" rel="external nofollow" type="image/x-icon">
<link rel="stylesheet" href="/wp-content/themes/runoob/style.css?v=1.141" rel="external nofollow" type="text/css" media="all" />
<link rel="stylesheet" href="//cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="external nofollow" media="all" />
<!--[if gte IE 9]><!-->
。。。。。。。。。。
这里只展示部分不然你半天看不到头

当然爬个HTML对于我们来说没啥用,现在我们要做些过滤,比如这个node教程中我想知道课程目录有哪些,这样可以选择感兴趣的去看看学学。直接上代码吧还是:

不过在此之前我们需要下载cheerio模块(cheerio是nodejs的抓取页面模块,为服务器特别定制的,快速、灵活、实施的jQuery核心实现。适合各种Web爬虫程序。)具体详细介绍你们可以自行去搜索了解,cheerio的用跟jquery的用法非常类似,所以不用担心上手繁琐。

PS G:\node\node-http> npm install cheerio

建立node-http-more.js,其中代码如下:

var http=require('http');//获取http模块
var cheerio=require('cheerio');//引入cheerio模块
var url='http://www.runoob.com/nodejs/nodejs-tutorial.html';//定义node官网地址变量
// filer node chapter
function filerNodeChapter(html){
  // 将爬取得HTML装载起来
  var $=cheerio.load(html);
  // 拿到左侧边栏的每个目录
  var nodeChapter=$('#leftcolumn a');
  //这里我希望我能获取的到的最终数据格式这个样子的,如此我们能知道每个目录的地址及标题
  /**
   * [{id:,title:}]
   */
  var chapterData=[];
  nodeChapter.each(function(item){
    // 获取每项的地址及标题
    var id=$(this).attr('href');
    var title=$(this).text();
    chapterData.push({
      id:id,
      title:title
    })
  })

  return chapterData;

}

//获取每个数据
function getChapterData(nodeChapter){
  nodeChapter.forEach(function(item){
    console.log(' 【 '+item.id+' 】'+item.title+'\n')
  });
}

http.get(url,function(res){
  var html='';

  // 这里将会触发data事件,不断触发不断跟新html直至完毕
  res.on('data',function(data){
    html +=data
  })

  // 当数据获取完成将会触发end事件,这里将会打印初node官网的html
  res.on('end',function(){
    //console.log(html)
    // 过滤出node.js的课程目录
    var nodeChapter= filerNodeChapter(html);

    //循环打印所获取的数据
    getChapterData(nodeChapter)
  })
}).on('error',function(){
  console.log('获取node官网相关数据出错')
})

终端执行结果及打印出课程目录

G:\node\node-http> node node-http-more.js
 【 /nodejs/nodejs-tutorial.html 】
Node.js 教程

 【 /nodejs/nodejs-install-setup.html 】
Node.js 安装配置

 【 /nodejs/nodejs-http-server.html 】
Node.js 创建第一个应用

 【 nodejs-npm.html 】 NPM 使用介绍

 【 nodejs-repl.html 】 Node.js REPL

 【 nodejs-callback.html 】 Node.js 回调函数

 【 nodejs-event-loop.html 】 Node.js 事件循环

 【 nodejs-event.html 】 Node.js EventEmitter

 【 nodejs-buffer.html 】 Node.js Buffer

 【 nodejs-stream.html 】 Node.js Stream

 【 /nodejs/nodejs-module-system.html 】
Node.js 模块系统
。。。。。。。。。。。
这里就不全部给出,你可以自己尝试着运行操作查看所有结果

到此一个简单的爬虫就写完了,赶紧自己动手试试吧,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery从头学起第三讲
Jul 06 Javascript
js实现的仿新浪微博完美的时间组件升级版
Dec 20 Javascript
javascript学习笔记(十一) 正则表达式介绍
Jun 20 Javascript
js中的getAttribute方法使用示例
Aug 01 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
Mar 21 Javascript
js显示文本框提示文字的方法
May 07 Javascript
纯js实现手风琴效果代码
Apr 17 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
Jun 16 Javascript
vue中component组件的props使用详解
Sep 04 Javascript
angular 实现同步验证器跨字段验证的方法
Apr 11 Javascript
vue 实现v-for循环回来的数据动态绑定id
Nov 07 Javascript
关于JS中的作用域中的问题思考分享
Apr 06 Javascript
JS脚本实现网页自动秒杀点击
Jan 11 #Javascript
Javascript网页抢红包外挂实现分享
Jan 11 #Javascript
JS写谷歌浏览器chrome的外挂实例
Jan 11 #Javascript
React 高阶组件入门介绍
Jan 11 #Javascript
基于react后端渲染模板引擎noox发布使用
Jan 11 #Javascript
Router解决跨模块下的页面跳转示例
Jan 11 #Javascript
vuex 使用文档小结篇
Jan 11 #Javascript
You might like
PHP 开发工具
2006/12/06 PHP
排序算法之PHP版快速排序、冒泡排序
2014/04/09 PHP
php从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
PHP实现的微信公众号扫码模拟登录功能示例
2019/05/30 PHP
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
基于jQuery架构javascript基础体系
2011/01/01 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
2013/08/28 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
jQuery的观察者模式详解
2014/12/22 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
Vue表情输入组件 微信face表情组件
2019/02/11 Javascript
如何基于JS截获动态代码
2019/12/25 Javascript
python中元类用法实例
2014/10/10 Python
深入解析Python中函数的参数与作用域
2016/03/20 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
使用opencv中匹配点对的坐标提取方式
2020/06/04 Python
Python连接Mysql进行增删改查的示例代码
2020/08/03 Python
python3 re返回形式总结
2020/11/20 Python
python 检测图片是否有马赛克
2020/12/01 Python
CSS3实现内凹圆角的实例代码
2017/05/04 HTML / CSS
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
文员个人的求职信范文
2013/09/26 职场文书
食品安全处置方案
2014/06/14 职场文书
大学专科自荐信
2014/06/17 职场文书
2014年健康教育工作总结
2014/11/20 职场文书
部队2014年终工作总结
2014/11/27 职场文书
检讨书格式
2015/01/23 职场文书