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 相关文章推荐
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
May 21 Javascript
JavaScript实现快速排序(自已编写)
Dec 19 Javascript
纯javascript实现简单下拉刷新功能
Mar 13 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
Mar 18 Javascript
javascript实现英文首字母大写
Apr 23 Javascript
JS三级可折叠菜单实现方法
Feb 29 Javascript
JavaScript绑定事件监听函数的通用方法
May 14 Javascript
轻松掌握JavaScript享元模式
Aug 27 Javascript
BootStrap 超链接变按钮的实现方法
Sep 25 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
Feb 19 Javascript
webstorm添加*.vue文件支持
May 08 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
Jun 18 jQuery
基于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
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
写php分页时出现的Fatal error的解决方法
2011/04/18 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
2020/02/10 PHP
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
2010/01/22 Javascript
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
JS画线(实例代码)
2013/11/20 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
排序算法的javascript实现与讲解(99js手记)
2014/09/28 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
vue通过watch对input做字数限定的方法
2017/07/13 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
深入浅析Vue 中 ref 的使用
2019/04/29 Javascript
vue实现自定义多选按钮
2020/07/16 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
django 解决manage.py migrate无效的问题
2018/05/27 Python
Python高级特性与几种函数的讲解
2019/03/08 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
python中str内置函数用法总结
2020/12/27 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
芬兰灯具网上商店:Nettilamppu.fi
2018/06/30 全球购物
Jacques Lemans德国:奥地利钟表品牌
2019/12/26 全球购物
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
2014/12/30 面试题
军训自我鉴定
2014/01/22 职场文书
实习老师离校感言
2014/02/03 职场文书
2016年最美孝心少年事迹材料
2016/02/26 职场文书
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers