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 相关文章推荐
Exitjs获取DataView中图片文件名
Nov 26 Javascript
JavaScript词法作用域与调用对象深入理解
Nov 29 Javascript
iframe窗口高度自适应的实现方法
Jan 08 Javascript
node.js中的events.emitter.once方法使用说明
Dec 10 Javascript
JS实现很酷的水波文字特效实例
Feb 26 Javascript
JavaScript实现图片DIV竖向滑动的方法
Apr 25 Javascript
javascript 判断两个日期之差的示例代码
Sep 05 Javascript
js识别uc浏览器的代码
Nov 06 Javascript
js select下拉联动 更具级联性!
Apr 17 Javascript
JS实现websocket长轮询实时消息提示的效果
Oct 10 Javascript
一步步教你利用Docker设置Node.js
Nov 20 Javascript
JavaScript设计模式之享元模式实例详解
Jan 17 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/10/09 PHP
php 文件上传类代码
2011/08/06 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
2014/11/22 PHP
php操作mongoDB实例分析
2014/12/29 PHP
php获得网站访问统计信息类Compete API用法实例
2015/04/02 PHP
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
jquery获取当前点击对象的value方法
2014/02/28 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
easyui window refresh 刷新两次的解决方法(推荐)
2016/05/18 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
Angular2 组件间通过@Input @Output通讯示例
2017/08/24 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
Vue项目中如何使用Axios封装http请求详解
2019/10/23 Javascript
微信小程序网络请求实现过程解析
2019/11/06 Javascript
js实现炫酷光感效果
2020/09/05 Javascript
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python 切换root 执行命令的方法
2019/01/19 Python
Python threading的使用方法解析
2019/08/28 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
pandas的resample重采样的使用
2020/04/24 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
Huda Beauty官方商店:化妆和美容产品
2020/09/05 全球购物
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
土木工程毕业生自荐信
2013/11/12 职场文书
农村党支部先进事迹
2014/01/14 职场文书
党员违纪检讨书
2014/02/18 职场文书
食品销售计划书
2014/04/26 职场文书
学校领导班子对照检查材料
2014/08/28 职场文书
2014年施工员工作总结
2014/11/18 职场文书
写给孩子的新学期寄语
2015/02/27 职场文书
个人培训总结
2015/03/05 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书