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 相关文章推荐
javascript forEach通用循环遍历方法
Oct 11 Javascript
深入理解JavaScript定时机制
Oct 29 Javascript
javascript表单验证使用示例(javascript验证邮箱)
Jan 07 Javascript
JavaScript通过字符串调用函数的实现方法
Mar 18 Javascript
jQuery UI设置固定日期选择特效代码分享
Aug 27 Javascript
js实现超酷的照片墙展示效果图附源码下载
Oct 08 Javascript
js实现页面刷新滚动条位置不变
Nov 27 Javascript
设置jquery UI 控件的大小方法
Dec 12 Javascript
JS实现数组去重方法总结(六种方法)
Jul 14 Javascript
JS使用贪心算法解决找零问题示例
Nov 27 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
Jan 07 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
Aug 31 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 图片加水印与上传图片加水印php类
2010/05/12 PHP
PHP之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
2015/01/21 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
javascript引擎长时间独占线程造成卡顿的解决方案
2014/12/03 Javascript
纯javascript实现简单下拉刷新功能
2015/03/13 Javascript
第五章之BootStrap 栅格系统
2016/04/25 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
2017/09/17 Javascript
express如何使用session与cookie的方法
2018/01/30 Javascript
Javascript中prototype与__proto__的关系详解
2018/03/11 Javascript
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
详解Webpack4多页应用打包方案
2020/07/16 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
Python将string转换到float的实例方法
2019/07/29 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
2020/01/03 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
Python devel安装失败问题解决方案
2020/06/09 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
HTML5 使用 sessionStorage 进行页面传值的方法
2018/07/02 HTML / CSS
后勤副校长自我鉴定
2013/10/13 职场文书
杠杆的科学教学反思
2014/01/10 职场文书
抗震救灾标语
2014/06/26 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
小学四年级班务总结该怎么写?
2019/08/16 职场文书
Python Matplotlib绘制两个Y轴图像
2022/04/13 Python