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 相关文章推荐
避免回车键导致的页面无意义刷新的解决方法
Apr 12 Javascript
网页中表单按回车就自动提交的问题的解决方案
Nov 03 Javascript
4种JavaScript实现简单tab选项卡切换的方法
Jan 06 Javascript
Vue2递归组件实现树形菜单
Apr 10 Javascript
微信小程序实战之登录页面制作(5)
Mar 30 Javascript
JS实现的四级密码强度检测功能示例
May 11 Javascript
JSON 数据格式详解
Sep 13 Javascript
Vue全家桶实践项目总结(推荐)
Nov 04 Javascript
纯js代码生成可搜索选择下拉列表的实例
Jan 11 Javascript
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
Jul 19 Javascript
javascript异步处理与Jquery deferred对象用法总结
Jun 04 jQuery
通过GASP让vue实现动态效果实例代码详解
Nov 24 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
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
PHP 递归效率分析
2009/11/24 PHP
PHP后台实现微信小程序登录
2018/08/03 PHP
PHP实现计算器小功能
2020/08/28 PHP
XP折叠菜单&仿QQ2006菜单
2006/12/16 Javascript
javascript 特殊字符串
2009/02/25 Javascript
jquery获取元素值的方法(常见的表单元素)
2013/11/15 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
浅析JavaScript动画
2015/06/10 Javascript
js实现当复选框选择匿名登录时隐藏登录框效果
2015/08/14 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
js中数组结合字符串实现查找(屏蔽广告判断url等)
2016/03/30 Javascript
EasyUI加载完Html内容样式渲染完成后显示
2016/07/25 Javascript
Vue.js快速入门教程
2016/09/07 Javascript
Vue单文件组件的如何使用方式介绍
2017/07/28 Javascript
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
详解vue v-model
2020/08/31 Javascript
python snownlp情感分析简易demo(分享)
2017/06/04 Python
Python目录和文件处理总结详解
2019/09/02 Python
Python用户自定义异常的实现
2020/12/25 Python
迪拜航空官方网站:flydubai
2017/04/20 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
科室工作个人总结的自我评价
2013/10/29 职场文书
小学生读书活动总结
2014/06/30 职场文书
建筑施工安全责任书
2014/07/24 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
2015年会计个人工作总结
2015/04/02 职场文书
科技活动总结范文
2015/05/11 职场文书
小爸爸观后感
2015/06/15 职场文书
铁人纪念馆观后感
2015/06/16 职场文书
公司出差管理制度范本
2015/08/05 职场文书