基于node的简单爬虫
直接上代码了,就是这么直接…………
还得一定要150字才能发布到首页……
'use strict'; //引入模块 var https=require('https'); var fs=require('fs'); var path=require('path'); var cheerio=require('cheerio'); //爬虫的url信息 var getUrl=['/top250','/top250?start=25&filter=','/top250?start=50&filter=','/top250?start=75&filter=','/top250?start=100&filter=','/top250?start=125&filter=','/top250?start=150&filter=','/top250?start=175&filter=','/top250?start=200&filter=']; for(var i=0;i<getUrl.length;i++){ var opt={ hostname:'movie.douban.com', path:getUrl[i], port:443 }; //创建http get请求 https.get(opt,function(res){ var html=''; //保存抓取到的html源码 var movies=[]; //保存解析html后的数据,即我们需要的电影信息 res.setEncoding('utf-8'); //设置编码 //抓取页面内容 res.on('data',function(chunk){ html+=chunk; }); res.on('end',function(){ var $=cheerio.load(html); $(".item").each(function(){ var movie={ title:$('.title',this).text(), //获取电影名称 star:$('.star .rating_num',this).text(), //获取电影评分 link:$('a',this).attr('href'), //获取电影详情页链接 picUrl:$('.pic img',this).attr('src') }; movies.push(movie); //下载图片 downloadImg('img/',movie.picUrl); }); //保存数据 saveData('data/data.json',movies); console.log(movies); }); }).on('error',function(err){ console.log(err); }); } //保存数据到本地 function saveData(path,movies){ fs.writeFile(path,JSON.stringify(movies,null,4),function(err){ if(err){ return console.log(err); } console.log('data saved'); }) } //下载图片 function downloadImg(imgDir,url){ https.get(url,function(res){ var data=''; res.setEncoding('binary'); res.on('data',function(chunk){ data+=chunk; }); res.on('end',function(){ fs.writeFile(imgDir+path.basename(url),data,'binary',function(err){ if(err){ return console.log(err); } console.log('image downloaded:',path.basename(url)); }) }) }).on('error',function(err){ console.log(err); }) }