时间:2021-05-26
前言
早就听过爬虫,这几天开始学习nodejs,写了个爬虫https://github.com/leichangchun/node-crawlers/tree/master/superagent_cheerio_demo,爬取 博客园首页的文章标题、用户名、阅读数、推荐数和用户头像,现做个小总结。
使用到这几个点:
1、node的核心模块-- 文件系统
2、用于http请求的第三方模块 -- superagent
3、用于解析DOM的第三方模块 -- cheerio
几个模块详细的讲解及API请到各个链接查阅,demo中只有简单的用法。
准备工作
使用npm管理依赖,依赖信息会存放在package.json中
//安装用到的第三方模块cnpm install --save superagent cheerio引入所需要用到的功能模块
//引入第三方模块,superagent用于http请求,cheerio用于解析DOMconst request = require('superagent');const cheerio = require('cheerio');const fs = require('fs');请求 + 解析页面
想要爬到博客园首页的内容,首先要请求首页地址,拿到返回的html,这里使用superagent进行http请求,基本的使用方法如下:
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上手非常快。直接看代码实例
//目标链接 博客园首页let targetUrl = 'https:///';//用来暂时保存解析到的内容和图片地址数据let content = '';let imgs = [];//发起请求request.get(targetUrl) .end( (error,res) => { 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核心的文件系统
//创建目录function mkdir(_path,callback){ if(fs.existsSync(_path)){ console.log(`${_path}目录已存在`) }else{ fs.mkdir(_path,(error)=>{ if(error){ return console.log(`创建${_path}目录失败`); } console.log(`创建${_path}目录成功`) }) } callback(); //没有生成指定目录不会执行}有了指定目录之后,可以写入数据了,txt文件的内容已经有了,直接写入就可以了使用writeFile()
//将文字内容存入txt文件中function saveContent() { fs.writeFile('./content/content.txt',content.toString());}取到了图片的链接,所以需要再使用superagent下载图片,存在本地。superagent可以直接返回一个响应流,再配合nodejs的管道,直接把图片内容写到本地
//下载爬到的图片function downloadImg() { imgs.forEach((imgUrl,index) => { //获取图片名 let imgName = imgUrl.split('/').pop(); //下载图片存放到指定目录 let stream = fs.createWriteStream(`./imgs/${imgName}`); let req = request.get('https:' + imgUrl); //响应流 req.pipe(stream); console.log(`开始下载图片 https:${imgUrl} --> ./imgs/${imgName}`); } )}效果
执行下demo,看下效果,数据已经正常爬下来了
非常简单的一个demo,可能也没有那么严谨,不过总是走出了node的第一小步。
总结
以上所述是小编给大家介绍的nodejs爬虫初试superagent和cheerio,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Intro最近在用nodejs写爬虫,之前的nodejs爬虫代码用js写的,感觉可维护性太差,也没有智能提示,于是把js改用ts(typescript)重写一下
1.前言分析往常都是利用Python/.NET语言实现爬虫,然现在作为一名前端开发人员,自然需要熟练NodeJS。下面利用NodeJS语言实现一个糗事百科的爬虫
前言前端时间再回顾了一下node.js,于是顺势做了一个爬虫来加深自己对node的理解。主要用的到是request,cheerio,async三个模块reque
本文实例讲述了nodejs制作小爬虫功能。分享给大家供大家参考,具体如下:1安装nodejs2安装需要模块npminstallrequestcheerio3新建
本文介绍了Node.js利用cheerio制作简单的网页爬虫示例,分享给大家,具有如下:1.目标完成对网站的标题信息获取将获取到的信息输出在一个新文件工具:ch