微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

nodejs爬虫初试superagent和cheerio

前言

  早就听过爬虫,这几天开始学习nodejs,写了个爬虫,爬取 博客园首页的文章标题、用户名、阅读数、推荐数和用户头像,现做个小总结。

  使用到这几个点:

  1、node的核心模块--

  2、用于http请求的第三方模块 --

  3、用于解析DOM的第三方模块 --

  几个模块详细的讲解及API请到各个链接查阅,demo中只有简单的用法

准备工作

  使用npm管理依赖,依赖信息会存放在package.json中

rush:js;"> //安装用到的第三方模块 cnpm install --save superagent cheerio

  引入所需要用到的功能模块

rush:js;"> //引入第三方模块,superagent用于http请求,cheerio用于解析DOM const request = require('superagent'); const cheerio = require('cheerio'); const fs = require('fs');

请求 + 解析页面

  想要爬到博客首页内容,首先要请求首页地址,拿到返回的html,这里使用superagent进行http请求,基本的使用方法如下:

rush:js;"> request.get(url) .end(error,res){ //do something }

  向指定的url发起get请求,请求错误时,会有error返回(没有错误时,error为null或undefined),res为返回的数据。

  拿到html内容后,要拿到我们想要的数据,这个时候就需要用cheerio解析DOM了,cheerio要先load目标html,然后再进行解析,API和jquery的API非常类似,熟悉jquery上手非常快。直接看代码实例

{ if(error){ //请求出错,打印错误,返回 console.log(error) return; } // cheerio需要先load html let $ = cheerio.load(res.text); //抓取需要的数据,each为cheerio提供的方法用来遍历 $('#post_list .post_item').each( (index,element) => { //分析所需要的数据的DOM结构 //通过选择器定位到目标元素,再获取到数据 let temp = { '标题' : $(element).find('h3 a').text(),'作者' : $(element).find('.post_item_foot > a').text(),'阅读数' : +$(element).find('.article_view a').text().slice(3,-2),'推荐数' : +$(element).find('.diggnum').text() } //拼接数据 content += JSON.stringify(temp) + '\n'; //同样的方式获取图片地址 if($(element).find('img.pfs').length > 0){ imgs.push($(element).find('img.pfs').attr('src')); } }); //存放数据 mkdir('./content',saveContent); mkdir('./imgs',downloadImg); })

存储数据

  上面解析DOM之后,已经拼接了所需要的信息内容,也拿到了图片的URL,现在就进行存储,把内容存放到指定目录的txt文件中,而且下载图片到指定目录

  先创建目录,使用nodejs核心的文件系统

{ if(error){ return console.log(`创建${_path}目录失败`); } console.log(`创建${_path}目录成功`) }) } callback(); //没有生成指定目录不会执行 }

  有了指定目录之后,可以写入数据了,txt文件内容已经有了,直接写入就可以了使用writeFile()

rush:js;"> //将文字内容存入txt文件中 function saveContent() { fs.writeFile('./content/content.txt',content.toString()); }

  取到了图片链接,所以需要再使用superagent下载图片,存在本地。superagent可以直接返回一个响应流,再配合nodejs的管道,直接把图片内容写到本地

{ //获取图片名 let imgName = imgurl.split('/').pop();
//下载<a href="https://www.jb51.cc/tag/tupiancunfang/" target="_blank" class="keywords">图片存放</a>到指定目录
let stream = fs.createWriteStream(`./imgs/${imgName}`);
let req = request.get('https:' + <a href="https://www.jb51.cc/tag/imgur/" target="_blank" class="keywords">imgur</a>l); //响应流
req.pipe(stream);
console.log(`开始下载<a href="https://www.jb51.cc/tag/tupian/" target="_blank" class="keywords">图片</a> https:${<a href="https://www.jb51.cc/tag/imgur/" target="_blank" class="keywords">imgur</a>l} --> ./imgs/${imgName}`);     

} )
}

效果  

  执行下demo,看下效果,数据已经正常爬下来了

  非常简单的一个demo,可能也没有那么严谨,不过总是走出了node的第一小步。

总结

以上所述是小编给大家介绍的nodejs爬虫初试superagent和cheerio。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持

原文地址:https://www.jb51.cc/nodejs/33384.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐