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 相关文章推荐
JS在TextArea光标位置插入文字并实现移动光标到文字末尾
Jun 21 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
Oct 20 Javascript
JS 打印功能代码可实现打印预览、打印设置等
Oct 31 Javascript
jquery实现用户打分评分特效
May 28 Javascript
JavaScript中的lastIndexOf()方法使用详解
Jun 06 Javascript
直接拿来用的15个jQuery代码片段
Sep 23 Javascript
JS实现选项卡实例详解
Nov 17 Javascript
jquery——九宫格大转盘抽奖实例
Jan 16 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
May 11 Javascript
JS+canvas画一个圆锥实例代码
Dec 13 Javascript
vue项目部署到nginx/tomcat服务器的实现
Aug 26 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
Dec 26 Vue.js
基于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中break及continue两个流程控制指令区别分析
2011/04/18 PHP
打造超酷的PHP数据饼图效果实现代码
2011/11/23 PHP
探讨方法的重写(覆载)详解
2013/06/08 PHP
PHP页面跳转实现延时跳转的方法
2016/12/10 PHP
PHP文件操作简单介绍及函数汇总
2020/12/11 PHP
javaScript 关闭浏览器 (不弹出提示框)
2010/01/31 Javascript
jQuery判断对象是否存在的方法
2015/02/05 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
2015/03/04 Javascript
基于JavaScript实现弹出框效果
2016/02/19 Javascript
浅析Bootstrap组件之面板组件
2016/05/04 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
2016/11/09 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
React实现点击删除列表中对应项
2017/01/10 Javascript
jQuery Pagination分页插件使用方法详解
2017/02/28 Javascript
原生js实现鼠标跟随效果
2017/02/28 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
2020/05/28 Javascript
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
python数组循环处理方法
2019/08/26 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
关于 HTML5 的七个传说小结
2012/04/12 HTML / CSS
澳大利亚制造的羊皮靴:Original UGG Boots
2017/11/13 全球购物
乌克兰巴士票购买网站:inBus
2021/03/12 全球购物
出纳岗位职责范本
2013/12/01 职场文书
更夫岗位责任制
2014/02/11 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
统计员岗位职责
2015/02/11 职场文书
化妆品促销活动总结
2015/05/07 职场文书
《开国大典》教学反思
2016/02/16 职场文书
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript
Python 中的 copy()和deepcopy()
2021/11/07 Python