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 相关文章推荐
基于jQuery的输入框无值自动显示指定数据的实现代码
Jan 24 Javascript
JS实现简单的顶部定时关闭层效果
Jun 15 Javascript
javascript实现鼠标拖动改变层大小的方法
Apr 30 Javascript
jquery.validate 自定义验证方法及validate相关参数
Jan 18 Javascript
用原生js统计文本行数的简单示例
Aug 19 Javascript
详解javascript表单的Ajax提交插件的使用
Dec 29 Javascript
基于JavaScript实现活动倒计时效果
Apr 20 Javascript
angular4 共享服务在多个组件中数据通信的示例
Mar 30 Javascript
深入理解Vue Computed计算属性原理
May 29 Javascript
Vue项目打包部署到iis服务器的配置方法
Oct 14 Javascript
Element Dropdown下拉菜单的使用方法
Jul 26 Javascript
最新最全的手机号验证正则表达式
Feb 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
基于php-fpm的配置详解
2013/06/03 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
显示js对象所有属性和方法的函数
2009/10/16 Javascript
六款帮助你实现惊艳视差滚动效果的jQuery插件
2012/09/14 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
angular学习之ngRoute路由机制
2017/04/12 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
Vue常见面试题整理【值得收藏】
2018/09/20 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
[01:14]3.19DOTA2发布会 三代刀塔人第二代
2014/03/25 DOTA
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
2019/04/04 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
2019/06/05 Python
Tensorflow模型实现预测或识别单张图片
2019/07/19 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
Django app配置多个数据库代码实例
2019/12/17 Python
信号生成及DFT的python实现方式
2020/02/25 Python
python 实现数据库中数据添加、查询与更新的示例代码
2020/12/07 Python
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
Canvas 文本填充线性渐变的使用详解
2020/06/22 HTML / CSS
中小学校园安全广播稿
2014/09/29 职场文书
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
男方婚礼答谢词
2015/01/20 职场文书
2015年工商所工作总结
2015/05/21 职场文书
【2·13】一图读懂中国无线电发展
2022/02/18 无线电