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 相关文章推荐
使用dynatrace-ajax跟踪JavaScript的性能
Apr 12 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
May 27 Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
Dec 13 Javascript
js设置function参数默认值(适合没有传参情况)
Feb 24 Javascript
jquery实现html页面 div 假分页有原理有代码
Sep 06 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
Dec 13 Javascript
JQUERY表单暂存功能插件分享
Feb 23 Javascript
jQuery学习之DOM节点的插入方法总结
Jan 22 Javascript
js实现滑动到页面底部自动加载更多功能
Feb 15 Javascript
jq checkbox 的全选并ajax传参的实例
Apr 01 Javascript
在vue中实现简单页面逆传值的方法
Nov 27 Javascript
javascript实现导航栏分页效果
Jun 27 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
复杂检索数据并分页显示的处理方法
2006/10/09 PHP
thinkphp实现图片上传功能分享
2014/03/04 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
2015/05/13 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
js可突破windows弹退效果代码
2008/08/09 Javascript
JavaScript 私有成员分析
2009/01/13 Javascript
javascript for循环设法提高性能
2010/02/24 Javascript
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
js中有关IE版本检测
2012/01/04 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
JS组件系列之MVVM组件 vue 30分钟搞定前端增删改查
2017/04/28 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
js实现从右往左匀速显示图片(无缝轮播)
2020/06/29 Javascript
JS实现炫酷雪花飘落效果
2020/08/19 Javascript
node中短信api实现验证码登录的示例代码
2021/01/20 Javascript
[01:15:44]首部DOTA2纪录片今日23时全网上映
2014/03/19 DOTA
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
[01:13:59]LGD vs Mineski Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python 性能优化技巧总结
2016/11/01 Python
Python批处理删除和重命名文件夹的实例
2018/07/11 Python
django认证系统 Authentication使用详解
2019/07/22 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
python中with用法讲解
2020/02/07 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
2021/02/05 Python
《小石潭记》教学反思
2014/02/13 职场文书
2014年连锁店圣诞节活动方案
2014/12/09 职场文书
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS
Pytest中skip和skipif的具体使用方法
2021/06/30 Python