基于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 相关文章推荐
随窗体滑动的小插件sticky源码
Jun 21 Javascript
jQuery性能优化的38个建议
Mar 04 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
Jul 28 Javascript
实用又漂亮的BootstrapValidator表单验证插件
May 30 Javascript
AngularJs Injecting Services Into Controllers详解
Sep 02 Javascript
深入理解bootstrap框架之入门准备
Oct 09 Javascript
jQuery中弹出iframe内嵌页面元素到父页面并全屏化的实例代码
Dec 27 Javascript
关于jQuery库冲突的完美解决办法
May 20 jQuery
解决Extjs下拉框不显示的问题
Jun 21 Javascript
详解使用React全家桶搭建一个后台管理系统
Nov 04 Javascript
小程序自定义单页面、全局导航栏的实现代码
Mar 15 Javascript
VUE中setTimeout和setInterval自动销毁案例
Sep 07 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
mysq GBKl乱码
2006/11/28 PHP
解析yii数据库的增删查改
2013/06/20 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
php基于 swoole 实现的异步处理任务功能示例
2019/08/13 PHP
javascript 面向对象思想 附源码
2009/07/07 Javascript
JQuery动态给table添加、删除行 改进版
2011/01/19 Javascript
禁止拷贝网页内容的js代码
2014/01/22 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
2016/02/26 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
在Express中提供静态文件的实现方法
2019/10/17 Javascript
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
详解ECMAScript2019/ES10新属性
2019/12/06 Javascript
Vue组件模板的几种书写形式(3种)
2020/02/19 Javascript
基于html+css+js实现简易计算器代码实例
2020/02/28 Javascript
.netcore+vue 实现压缩文件下载功能
2020/09/24 Javascript
零基础写python爬虫之神器正则表达式
2014/11/06 Python
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
Python中标准库OS的常用方法总结大全
2017/07/19 Python
HTML5 video视频字幕的使用和制作方法
2018/05/03 HTML / CSS
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
Glamest意大利:女性在线奢侈品零售店
2019/04/28 全球购物
EJB的基本架构
2016/09/22 面试题
给排水专业应届生求职信
2013/10/12 职场文书
生物专业个人自荐信范文
2013/11/29 职场文书
数控专业大学毕业生职业规划范文
2014/02/06 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
未婚证明书模板
2014/10/08 职场文书
课外活动总结
2015/02/04 职场文书
家长对学校的意见和建议
2015/06/03 职场文书
教师学习十八届五中全会精神心得体会
2016/01/05 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
Win11筛选键导致键盘失灵怎么解决? Win11关闭筛选键的技巧
2022/04/08 数码科技