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 相关文章推荐
Extjs grid panel自带滚动条失效的解决方法
Sep 11 Javascript
Angular用来控制元素的展示与否的原生指令介绍
Jan 07 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
Oct 10 Javascript
jQuery中Datatables增加跳转到指定页功能
Feb 08 Javascript
Vue.js鼠标悬浮更换图片功能
May 17 Javascript
关于预加载InstantClick的问题解决方法
Sep 12 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
Oct 25 Javascript
Webpack优化配置缩小文件搜索范围
Dec 25 Javascript
在vue项目中引入高德地图及其UI组件的方法
Sep 04 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
Sep 02 Javascript
layer.open回调获取弹出层参数的实现方法
Sep 10 Javascript
vue中实现回车键登录功能
Feb 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 curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
WordPress中查询文章的循环Loop结构及用法分析
2015/12/17 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
详解PHP文件的自动加载(autoloading)
2018/02/04 PHP
jQuery中多个元素的Hover事件解决方案
2014/06/12 Javascript
js的image onload事件使用遇到的问题
2014/07/15 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
Bootstrap每天必学之栅格系统(布局)
2015/11/25 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
TypeScript学习之强制类型的转换
2016/12/27 Javascript
详解tween.js 中文使用指南
2018/01/05 Javascript
小程序绑定用户方案优化小结
2019/05/15 Javascript
深度了解vue.js中hooks的相关知识
2019/06/14 Javascript
js、jquery实现列表模糊搜索功能过程解析
2020/03/27 jQuery
在Python中操作时间之tzset()方法的使用教程
2015/05/22 Python
在VS Code上搭建Python开发环境的方法
2018/04/06 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
对web.py设置favicon.ico的方法详解
2018/12/04 Python
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
python字符串分割及字符串的一些常规方法
2019/07/24 Python
使用python实现名片管理系统
2020/06/18 Python
员工年终演讲稿
2014/01/03 职场文书
结婚喜宴家长答谢词
2014/01/15 职场文书
安踏广告词改编版
2014/03/21 职场文书
共产党员公开承诺书范文
2014/03/28 职场文书
一个都不能少观后感
2015/06/04 职场文书
哈姆雷特读书笔记
2015/06/29 职场文书
Django项目如何获得SSL证书与配置HTTPS
2021/04/30 Python
Python入门学习之类的相关知识总结
2021/05/25 Python
Django路由层如何获取正确的url
2021/07/15 Python
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL