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 相关文章推荐
23个Javascript弹出窗口特效整理
Feb 25 Javascript
使用jQuery实现的掷色子游戏动画效果
Mar 14 Javascript
JavaScript中检查对象property的存在性方法介绍
Dec 30 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
Sep 22 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
Feb 19 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
Apr 26 Javascript
JS 组件系列之BootstrapTable的treegrid功能
Jun 16 Javascript
实现一个完整的Node.js RESTful API的示例
Sep 29 Javascript
vue实现2048小游戏功能思路详解
May 09 Javascript
JS二级菜单不同实现方法分析【4种方法】
Dec 21 Javascript
@angular前端项目代码优化之构建Api Tree的方法
Dec 24 Javascript
Vue 实例事件简单示例
Sep 19 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 分页类 扩展代码
2009/06/11 PHP
php错误、异常处理机制(补充)
2012/05/07 PHP
php7 错误处理机制修改实例分析
2020/05/25 PHP
jquery 常用操作方法
2010/01/28 Javascript
解决jQuery插件tipswindown与hintbox冲突
2010/11/05 Javascript
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
jquery利用ajax调用后台方法实例
2013/08/23 Javascript
一个获取第n个元素节点的js函数
2014/09/02 Javascript
在Google 地图上实现做的标记相连接
2015/01/05 Javascript
JavaScript实现的圆形浮动标签云效果实例
2015/08/06 Javascript
JavaScript实现向右伸出的多级网页菜单效果
2015/08/25 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
整理关于Bootstrap列表组的慕课笔记
2017/03/29 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
2017/03/30 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
[05:46]2018完美盛典-《同梦共竞》
2018/12/17 DOTA
Python3实现从指定路径查找文件的方法
2015/05/22 Python
深入理解python中的atexit模块
2017/03/07 Python
使用tensorflow实现线性回归
2018/09/08 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
Python列表推导式实现代码实例
2020/09/09 Python
Python 找出英文单词列表(list)中最长单词链
2020/12/14 Python
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
数据库笔试题
2013/05/09 面试题
专业实习自我鉴定
2013/10/29 职场文书
单位成立周年感言
2014/01/26 职场文书
中专毕业生个人职业生涯规划
2014/02/19 职场文书
公司踏青活动方案
2014/08/16 职场文书
股指期货心得体会
2014/09/10 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
办公用品质量保证书
2015/05/11 职场文书
公司车辆管理制度
2015/08/04 职场文书
放假通知怎么写
2015/08/18 职场文书
宣传部部长竞选稿
2015/11/21 职场文书