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 相关文章推荐
小议Function.apply() 之一------(函数的劫持与对象的复制)
Nov 30 Javascript
JavaScript 组件之旅(一)分析和设计
Oct 28 Javascript
JavaScript是否可实现多线程  深入理解JavaScript定时机制
Dec 22 Javascript
通过onmouseover选项卡实现img图片的变化
Feb 12 Javascript
Visual Studio中js调试的方法图解
Jun 30 Javascript
使用jquery实现放大镜效果
Sep 02 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
Jan 21 Javascript
浅谈jquery点击label触发2次的问题
Jun 12 Javascript
JavaScript实现星星等级评价功能
Mar 22 Javascript
详解Webpack多环境代码打包的方法
Aug 03 Javascript
Vue自动构建发布脚本的方法示例
Jul 24 Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
Feb 05 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
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
jQuery cdn使用介绍
2013/05/08 Javascript
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
2014/11/19 Javascript
jquery移动端TAB触屏切换实现效果
2020/12/22 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
关于List.ToArray()方法的效率测试
2016/09/30 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
js构造函数创建对象是否加new问题
2018/01/22 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
2018/11/26 Javascript
Ant Design Pro 之 ProTable使用操作
2020/10/31 Javascript
jquery实现图片放大镜效果
2020/12/23 jQuery
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
python使用正则表达式提取网页URL的方法
2015/05/26 Python
浅谈Python批处理文件夹中的txt文件
2019/03/11 Python
Python Pandas 箱线图的实现
2019/07/23 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
解决python中0x80072ee2错误的方法
2020/07/19 Python
HTML5实现视频直播功能思路详解
2017/11/16 HTML / CSS
html5菜单折纸效果
2014/04/22 HTML / CSS
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
研究生毕业自我鉴定范文
2014/03/27 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
应聘教师求职信
2014/07/19 职场文书
优秀纪检干部材料
2014/08/27 职场文书
医院党员公开承诺书
2014/08/30 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
保险公司岗前培训工作总结
2015/10/24 职场文书
一道JS算法面试题——冒泡、选择排序
2021/04/21 Javascript
vue实现锚点定位功能
2021/06/29 Vue.js
JVM钩子函数的使用场景详解
2021/08/23 Java/Android
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python