闲聊

      好久没写博客了,前几天小颖在朋友的博客里看到了用nodejs的简单爬虫。所以小颖就自己试着做了个爬博客园数据的demo。嘻嘻......
     小颖最近养了条泰日天,自从养了我家仔仔后,我觉得我走上一条不归路,每天不到七点半就起床烧热水,然后给我家仔仔烫狗粮,给仔仔烫好狗粮后,我开始收拾自己,出门前给他再把热水瓶里的热水换了,每天跟伺候小孩一样伺候着我家小不点仔仔,然而在上周天他还是生病了,拉稀.......带宠物医院好不容易看好,医生说是低血糖,我就懵逼了,低血糖就不能让他饿着,可是他压根就不好好吃饭,我有什么办法,哎......操碎了心,祈祷吧希望我家小仔仔能健健康康快快乐乐的长大嘻嘻。

看代码啦:

1.首先先安装node。

2.新建package.json:

在自己创建的一个工程目录下打开cmd ,在里面输入命令npm init

3.新建data和img文件夹

4.新建app.js

  1. "use strict";
  2.  
  3. // 引入模块
  4. var http = require('http');
  5. var fs = require('fs');
  6. var path = require('path');
  7. var cheerio = require('cheerio');
  8.  
  9. // 爬虫的UR L信息
  10. var opt = {
  11. hostname: 'www.cnblogs.com',
  12. path: '',
  13. port: 80
  14. };
  15.  
  16. // 创建http get请求
  17. http.get(opt, function(res) {
  18. var html = ''; // 保存抓取到的HTML源码
  19. var blogs = []; // 保存解析HTML后的数据,即我们需要的电影信息
  20.  
  21. // 前面说过
  22. // res 是 Class: http.IncomingMessage 的一个实例
  23. // 而 http.IncomingMessage 实现了 stream.Readable 接口
  24. // 所以 http.IncomingMessage 也有 stream.Readable 的事件和方法
  25. // 比如 Event: 'data', Event: 'end', readable.setEncoding() 等
  26.  
  27. // 设置编码
  28. res.setEncoding('utf-8');
  29.  
  30. // 抓取页面内容
  31. res.on('data', function(chunk) {
  32. html += chunk;
  33. });
  34.  
  35. res.on('end', function() {
  36. // 使用 cheerio 加载抓取到的HTML代码
  37. // 然后就可以使用 jQuery 的方法了
  38. // 比如获取某个class:$('.className')
  39. // 这样就能获取所有这个class包含的内容
  40. var $ = cheerio.load(html);
  41.  
  42. // 解析页面
  43. // 每篇文章都在 item class 中
  44. $('#post_list .post_item .post_item_body').each(function() {
  45. // 获取图片链接
  46. var blog = {
  47. title: $('.post_item_body .titlelnk', this).text(), // 获取文章标题
  48. titleUrl: $('.post_item_body a', this).attr('href'), //文章链接地址
  49. peopleUrl: $('.post_item_summary a', this).attr('href'), // 博客地址
  50. peopleImg: $('.post_item_summary img', this).attr('src'),// 园友头像
  51. intro: $('.post_item_summary', this).text(), // 获取文章简介
  52. name: $('.post_item_foot .lightblue', this).text() // 获取文章简介
  53. };
  54.  
  55. // 把所有文章放在一个数组里面
  56. blogs.push(blog);
  57. if (blog.peopleImg) {// 如果有图片则下载图片
  58. downloadImg('img/', 'http:' + blog.peopleImg);
  59. }
  60. });
  61.  
  62. // 保存抓取到的文章数据
  63. saveData('data/data.json', blogs);
  64. });
  65. }).on('error', function(err) {
  66. console.log(err);
  67. });
  68.  
  69. /**
  70. * 保存数据到本地
  71. *
  72. * @param {string} path 保存数据的文件
  73. * @param {array} blogs 文章信息数组
  74. */
  75. function saveData(path, blogs) {
  76. // 调用 fs.writeFile 方法保存数据到本地
  77. fs.writeFile(path, JSON.stringify(blogs, null, 4), function(err) {
  78. if (err) {
  79. return console.log(err);
  80. }
  81. console.log('Data saved');
  82. });
  83. }
  84.  
  85. /**
  86. * 下载图片
  87. *
  88. * @param {string} imgDir 存放图片的文件夹
  89. * @param {string} url 图片的URL地址
  90. */
  91. function downloadImg(imgDir, url) {
  92. http.get(url, function(res) {
  93. var data = '';
  94.  
  95. res.setEncoding('binary');
  96.  
  97. res.on('data', function(chunk) {
  98. data += chunk;
  99. });
  100.  
  101. res.on('end', function() {
  102. // 调用 fs.writeFile 方法保存图片到本地
  103. fs.writeFile(imgDir + path.basename(url), data, 'binary',
  104. function(err) {
  105. if (err) {
  106. return console.log(err);
  107. }
  108. console.log('Image downloaded: ', path.basename(url));
  109. });
  110. });
  111. }).on('error', function(err) {
  112. console.log(err);
  113. });
  114. }

5.打开cmd执行 node app.js

然后看data文件夹下会生成data.json文件,img文件夹下会生成许多图片。

补充

  1. // 爬虫的UR L信息
  2. var opt = {
  3. hostname: 'www.cnblogs.com',
  4. path: '',
  5. port: 80
  6. };

nodejs的简单爬虫的更多相关文章

  1. nodejs实现简单爬虫

    nodejs结合cheerio实现简单爬虫 let cheerio = require("cheerio"), fs = require("fs"), util ...

  2. 用nodejs实现简单爬虫

    前言   本喵最近工作中需要使用node,并也想晋升为全栈工程师,所以开始了node学习之旅,在学习过程中, 我会总结一些实用的例子,做成博文和视频教程,以实例形式来理解体会node的用法,所以跟小猫 ...

  3. NodeJS简单爬虫

    NodeJS简单爬虫 最近一直在追火星的一本书,然后每次都要去网站看,感觉很麻烦,于是,想起用爬虫爬取章节,务实派,说干就干! 爬取思路 1.该网站的页面呈现出一定的规律 2.使用NodeJS的req ...

  4. 一次使用NodeJS实现网页爬虫记

    前言 几个月之前,有同事找我要PHP CI框架写的OA系统.他跟我说,他需要学习PHP CI框架,我建议他学习大牛写的国产优秀框架QeePHP. 我上QeePHP官网,发现官方网站打不开了,GOOGL ...

  5. Python简单爬虫入门三

    我们继续研究BeautifulSoup分类打印输出 Python简单爬虫入门一 Python简单爬虫入门二 前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信 ...

  6. [Java]使用HttpClient实现一个简单爬虫,抓取煎蛋妹子图

    第一篇文章,就从一个简单爬虫开始吧. 这只虫子的功能很简单,抓取到”煎蛋网xxoo”网页(http://jandan.net/ooxx/page-1537),解析出其中的妹子图,保存至本地. 先放结果 ...

  7. 简单爬虫,突破IP访问限制和复杂验证码,小总结

    简单爬虫,突破复杂验证码和IP访问限制 文章地址:http://www.cnblogs.com/likeli/p/4730709.html   好吧,看题目就知道我是要写一个爬虫,这个爬虫的目标网站有 ...

  8. Python简单爬虫入门二

    接着上一次爬虫我们继续研究BeautifulSoup Python简单爬虫入门一 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们Bea ...

  9. GJM : Python简单爬虫入门(二) [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

随机推荐

  1. SpringMvc项目中使用GoogleKaptcha 生成验证码

    前言:google captcha 是google生成验证码的一个工具类,其原理是将随机生成字符串保存到session中,同时以图片的形式返回给页面,之后前台页面提交到后台进行对比. 1.jar包准备 ...

  2. 导入礼包时,遇到file_get_contents读取的文本,去除空格、换行等的方法

    解决方法:正则替换: 代码:$gift_code_str = preg_replace('/((\s)*(\n)+(\s)*) /i ',',',file_get_contents($gift_cod ...

  3. java服务器获取客户端ip

    在写服务端代码时,有时需要对客户端ip做认证,比如限制只有某些ip能访问,或者1个ip1天只能访问几次.最近就碰到个需要限制ip的情况,从网上找了一些服务器获取客户端ip的方法,说的都不太完善,这里整 ...

  4. 设计模式之单一职责原则(SRP)

    自己之前写过一些关于设计模式的博客,但是大部分都写得比较匆忙.现在正好趁年前有时间,笔者打算好好地整理一下自己这块知识结构.开篇的第一个原则就是设计原则里面最简单的一个原则--单一职责原则. 想必大家 ...

  5. angular表格分页

    <!doctype html> <html lang="en" > <head> <meta charset="UTF-8&qu ...

  6. 在VMWare虚拟机中安装Ubuntu 16.04.1 LTS

    一.需要的准备 安装好VMWare虚拟机(傻瓜式安装,一直next就可以,请支持正版),将Ubuntu的系统镜像下载好,目前最新的LTS版本为16.04.1. 我把虚拟机和Ubuntu镜像传到了百度云 ...

  7. Spark计算模型

    [TOC] Spark计算模型 Spark程序模型 一个经典的示例模型 SparkContext中的textFile函数从HDFS读取日志文件,输出变量file var file = sc.textF ...

  8. 自述创业史 | XMove动作感应系统(二)

    XMove是沙漠君和几个死党从2010年开始开发的一套人体动作捕捉系统,软硬件全部自行开发,投入了大量的精力,历经三年,发展四个版本.文章分上下篇,本文为下篇,前三代的故事在<光荣与梦想| XM ...

  9. TV端:通过遥控器的点击实现图片的上下左右抖动的效果

    做TV端有一段时间了,我看到别的TV上有一个通过遥控器的触摸板来控制一张图片的相应方向的抖动,感觉听新奇的,就试着做了一个分享一下: 转载注明出处:http://www.cnblogs.com/hyy ...

  10. C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)

    作者: Aicken(李鸣)  来源: 博客园  发布时间: 2010-09-08 15:00  阅读: 4520 次  推荐: 0                   原文链接   [收藏] 摘要: ...