Node.js 实现爬虫(3) —— 保存爬取的数据
来源:互联网 发布:linux obj 编辑:程序博客网 时间:2024/06/07 04:03
保存爬取的数据
前面,我们已经写了爬虫程序并在控制台输出,但是,有时爬取的数据量过大,控制台查看不方便,所以,我们可以将数据保存到文件
//引入文件模块var fs = require("fs") //保存文件fs.writeFile(filename,fileStr,function (err) { if (err) throw err console.log("File Saved !")})
fs.writeFile(filename,fileStr,callback)
- 当filename不存在时,会新建文件;否则,重新写文件
- filename可以是相对路径,也可以是绝对路径
下面,将之前的多页面的程序中添加保存文件的功能
完整的程序如下:
var fs = require("fs") ;var http = require('http')var cheerio = require('cheerio')var Promise = require('bluebird')var url = 'http://blog.csdn.net/ranking.html'//过滤排行榜页面中“博客周排行”模块的urlfunction filterRankUrl(html){ var $ = cheerio.load(html) //加载html内容 var blogRank = $('.rankList .ranking').eq(1).find('li') var blogRankUrl = [] blogRank.each(function(item){ var blogRankItem = $(this) var url = blogRankItem.find('a.blog_a').attr('href') blogRankUrl.push(url) }) return blogRankUrl}//过滤每个URL数组对应页面的文章function filterArticle(html){ var $ = cheerio.load(html) var blogData = {} //获取博主 var author = $('#panel_Profile .user_name').text() blogData.author = author //获取文章信息 var blogAtricle = $('.list_item_new .list_item') var blogs = [] blogAtricle.each(function(item){ var blogItem = $(this) var blogItemData = {} var title = blogItem.find('.link_title').text().trim() var description = blogItem.find('.article_description').text().trim() var time = blogItem.find('.article_manage .link_postdate').text().trim() var view = blogItem.find('.article_manage .link_view').text().trim() var comments = blogItem.find('.article_manage .link_comments').text().trim() blogItemData.title = title blogItemData.description = description blogItemData.time = time blogItemData.view = view blogItemData.comments = comments blogs.push(blogItemData) }) blogData.blogs = blogs return blogData}//打印url数组function printUrlInfo(blogRankData){ blogRankData.forEach(function(item){ console.log(item) })}//打印每个页面的信息function printArticleInfo(blogData){ var fileStr = "" fileStr+="----博主 : "+blogData.author+"----\n" fileStr+="爬取文章数 : "+blogData.blogs.length+"\n" blogData.blogs.forEach(function(item){ fileStr+="文章名:"+item.title+'\n' fileStr+="文章描述:"+item.description+'\n' fileStr+="发表时间:"+item.time+'\n' fileStr+=item.view+'\n' fileStr+=item.comments+'\n' fileStr+="\n--------------------\n\n" }) return fileStr}function getUrlAsync(url){ return new Promise(function(resolve,reject){ console.log('正在爬取:'+url) http.get(url,function(res){ var html = '' res.on('data',function(data){ html+=data }) res.on('end',function(){ resolve(html) }) }).on('error',function(){ reject(e) console.log('获取数据出错') }) })}http.get(url,function(res){ var html = '' res.on('data',function(data){ html+=data }) res.on('end',function(){ var urlArr = filterRankUrl(html) //获取url printUrlInfo(urlArr) var fetchBlogArray = [] urlArr.forEach(function(url){ fetchBlogArray.push(getUrlAsync(url)) }) //执行promise Promise .all(fetchBlogArray) .then(function(pages){ var fileStr="" pages.forEach(function(html){ var blogData = filterArticle(html) fileStr += printArticleInfo(blogData) }) //写入文件 fs.writeFile("bb1.doc",fileStr,function (err) { if (err) throw err ; console.log("File Saved !"); //文件被保存 }) }) })}).on('error',function(){ console.log('获取数据出错');})
控制台输出如下:
保存文件如下:
阅读全文
0 0
- Node.js 实现爬虫(3) —— 保存爬取的数据
- Node.js 实现爬虫(1) —— 简单的爬虫程序
- Node.js 实现爬虫(2) —— 多页面的爬虫程序
- 爬虫记录(2)——简单爬取一个页面的图片并保存
- 养只爬虫当宠物(Node.js爬虫爬取58同城租房信息)
- 一起学爬虫 Node.js 爬虫篇(三)使用 PhantomJS 爬取动态页面
- python爬虫(3)——python爬取大规模数据的的方法和步骤
- Node.js:request+cheerio爬虫爬取免费代理
- python爬虫-豆瓣爬取数据保存为html文件
- node js简单爬虫实现
- Node.js 实现简易爬虫
- 【网络爬虫】数据的采集——爬取土木在线网的数据
- 3-爬虫爬取的数据有什么用
- node.js 小爬虫抓取网页数据(2)
- node.js实现简单的网络爬虫程序
- 使用node.js的http模块实现爬虫小工具
- [python爬虫]--爬取mzitu.com的图片并保存
- Node.js的简易爬虫
- 提示框
- iframe监听鼠标点击事件
- hibernate QueryPlanCache引发的heap区内存溢出
- Maven Assembly插件介绍
- 线程的生命周期
- Node.js 实现爬虫(3) —— 保存爬取的数据
- 打造平台产品的经验----《启示录》
- 如何利用Windows自带calc计算机进行取模运算
- MySQL--操作简记(汇总数据(聚集函数),分组数据,子查询)
- eclipse配置黑色主题
- UITableVIewCell中webView设置高度问题
- Kafka异常处理(客户端和消费者都找不到topic)
- springmvc初始化过程
- EHCache does not allow attribute "maxEntriesLocalHeap".