node实现的爬虫功能示例


Posted in Javascript onMay 04, 2018

本文实例讲述了node实现的爬虫功能。分享给大家供大家参考,具体如下:

node是服务器端的语言,所以可以像python一样对网站进行爬取,下面就使用node对博客园进行爬取,得到其中所有的章节信息。

第一步: 建立crawl文件,然后npm init。

第二步: 建立crawl.js文件,一个简单的爬取整个页面的代码如下所示:

var http = require("http");
var url = "http://www.cnblogs.com";
http.get(url, function (res) {
  var html = "";
  res.on("data", function (data) {
    html += data;
  });
  res.on("end", function () {
    console.log(html);
  });
}).on("error", function () {
  console.log("获取课程结果错误!");
});

即引入http模块,然后利用http对象的get请求,即一旦运行,相当于node服务器端发送了一个get请求请求这个页面,然后通过res返回,其中on绑定data事件用来不断地接受数据,最后end时我们就在后台打印出来。

这只是整个页面的一部分,我们可以在此页面审查元素,发现确实是一样的

我们只需要将其中的章节title和每一小节的信息爬到即可。

第三步: 引入cheerio模块,如下:(在gitbash中安装即可,cmd总是出问题)

cnpm install cheerio --save-dev

这个模块的引入,就是为了方便我们操作dom,就像jQuery一样。

第四步: 操作dom,获取有用信息。

var http = require("http");
var cheerio = require("cheerio");
var url = "http://www.cnblogs.com";
function filterData(html) {
  var $ = cheerio.load(html); 
  var items = $(".post_item");
  var result = [];
  items.each(function (item) {
    var tit = $(this).find(".titlelnk").text();
    var aut = $(this).find(".lightblue").text();
    var one = {
      title: tit,
      author: aut
    };
    result.push(one);
  });
  return result;
}
function printInfos(allInfos) {
  allInfos.forEach(function (item) {
    console.log("文章题目 " + item["title"] + '\n' + "文章作者 " + item["author"] + '\n'+ '\n');
  });
}
http.get(url, function (res) {
  var html = "";
  res.on("data", function (data) {
    html += data;
  });
  res.on("end", function (data) {
    var allInfos = filterData(html);
    printInfos(allInfos);
  });
}).on("error", function () {
  console.log("爬取博客园首页失败")
});

即上面的过程就是在爬取博客的题目和作者。

最终后台输出如下:

node实现的爬虫功能示例

这和博客园首页的内容是一致的:

node实现的爬虫功能示例

希望本文所述对大家nodejs程序设计有所帮助。

Javascript 相关文章推荐
Jquery AutoComplete自动完成 的使用方法实例
Mar 19 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
Jan 22 Javascript
jQuery页面加载初始化常用的三种方法
Jun 04 Javascript
jQuery的context属性用法实例
Dec 27 Javascript
JavaScript实现控制打开文件另存为对话框的方法
Apr 17 Javascript
纯JavaScript手写图片轮播代码
Oct 20 Javascript
详解微信小程序开发之下拉刷新 上拉加载
Nov 24 Javascript
基于vue+canvas的excel-like组件实例详解
Nov 28 Javascript
详解如何运行vue项目
Apr 15 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
May 20 Javascript
小程序点击图片实现png转jpg
Oct 22 Javascript
JS+Canvas实现五子棋游戏
Aug 26 Javascript
基于jQuery.i18n实现web前端的国际化
May 04 #jQuery
JavaScript实现百度搜索框效果
Mar 26 #Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
May 04 #Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
May 04 #Javascript
JS模拟实现哈希表及应用详解
May 04 #Javascript
vue地区选择组件教程详解
May 04 #Javascript
Vue 按键修饰符处理事件的方法
May 04 #Javascript
You might like
php类
2006/11/27 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
2014/04/17 PHP
php读取csc文件并输出
2015/05/21 PHP
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
js汉字转拼音实现代码
2013/02/06 Javascript
javascript中cookie对象用法实例分析
2015/01/30 Javascript
JavaScript中setFullYear()方法的使用详解
2015/06/11 Javascript
基于jquery实现左右按钮点击的图片切换效果
2021/01/27 Javascript
Angularjs的ng-repeat中去除重复数据的方法
2016/08/05 Javascript
纯JS代码实现隔行变色鼠标移入高亮
2016/11/23 Javascript
vue2 前后端分离项目ajax跨域session问题解决方法
2017/04/27 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
使用Vue组件实现一个简单弹窗效果
2018/04/23 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
用yum安装MySQLdb模块的步骤方法
2016/12/15 Python
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
基于python实现坦克大战游戏
2020/10/27 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
前端面试必备之CSS3的新特性
2017/09/05 HTML / CSS
应聘编辑职位自荐信范文
2014/01/05 职场文书
土木建筑学生自我评价
2014/01/14 职场文书
办公室主任主任岗位责任制
2014/02/11 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
公司口号大全
2014/06/11 职场文书
党在我心中的演讲稿
2014/09/13 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
乡镇保密工作承诺书
2015/05/04 职场文书
企业团队精神心得体会
2016/01/19 职场文书
详细介绍python类及类的用法
2021/05/31 Python
Vue3中toRef与toRefs的区别
2022/03/24 Vue.js
nginx之queue的具体使用
2022/06/28 Servers