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遍历checkbox获取选中项value值的方法
Feb 13 Javascript
JavaScript和CSS交互的方法汇总
Dec 02 Javascript
js实现点击添加一个input节点
Dec 05 Javascript
Javascript进制转换实例分析
May 14 Javascript
分享一些常用的jQuery动画事件和动画函数
Nov 27 Javascript
JavaScript中点击事件的写法
Jun 28 Javascript
Bootstrap实现提示框和弹出框效果
Jan 11 Javascript
利用jquery如何从json中读取数据追加到html中
Dec 01 jQuery
Vuex实现计数器以及列表展示效果
Mar 10 Javascript
LayerClose弹窗关闭刷新方法
Aug 17 Javascript
js实现简单页面全屏
Sep 17 Javascript
react-intl实现React国际化多语言的方法
Sep 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
SONY SRF-22W(33W)的电路分析和维修案例
2021/03/02 无线电
使用PHP实现密保卡功能实现代码<打包下载直接运行>
2011/10/09 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
php字符串过滤与替换小结
2015/01/26 PHP
PHP中把数据库查询结果输出为json格式简单实例
2015/04/09 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
php抛出异常与捕捉特定类型的异常详解
2016/10/26 PHP
理解JavaScript中worker事件api
2015/12/25 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
2016/12/23 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
Vue异步加载about组件
2017/10/31 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
2019/12/11 Javascript
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
Python操作列表的常用方法分享
2014/02/13 Python
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
解决Django中多条件查询的问题
2019/07/18 Python
使用HTML5中的contentEditable来将多行文本自动增高
2016/03/01 HTML / CSS
Html5 video标签视频的最佳实践
2020/02/26 HTML / CSS
美国销售第一的智能手机和平板电脑保护壳:OtterBox
2017/12/21 全球购物
乌克兰的第一家手表店:Deka
2020/03/05 全球购物
Conforama瑞士:家具、厨房、电器、装饰
2020/09/06 全球购物
Java程序员面试题
2013/07/15 面试题
超市5.1促销活动
2014/01/15 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
计生专干事迹
2014/05/28 职场文书
法学专业毕业生自荐信
2014/06/11 职场文书
啦啦队口号大全
2014/06/16 职场文书
个人创业事迹材料
2014/12/30 职场文书
订货会邀请函
2015/01/31 职场文书
志愿者个人总结
2015/03/03 职场文书
2017年大学生寒假社会实践活动总结
2016/04/06 职场文书