node js 爬虫爬取静态页面,
先打一个简单的通用框子
//根据爬取网页的协议 引入对应的协议, http||https var http = require('https'); //引入cheerio 简单点讲就是node中的jquery jquery写法获取所得页面dom元素 var cheerio = require('cheerio'); //目标网址 这里是图片网址 var url = ''; //文件读写 var fs = require('fs'); //发送request请求 var request = require('request'); //防止中文乱码 var iconv = require('iconv-lite'); function getimage(url, page) { //采用http模块向服务器发起一次get请求 http.get(url, function (res) { //get到x网址,成功执行回调函数 var html = ''; //用来存储请求网页的整个html内容 var htmlarr = []; var htmllength = 0; //监听data事件,每次取一块数据 res.on('data', function (chunk) { // html += chunk; htmlarr.push(chunk); htmllength += chunk.length; }); //监听end事件,如果整个网页内容的html都获取完毕,就执行回调函数 res.on('end', function () { html = Buffer.concat(htmlarr,htmllength); html = iconv.decode(html,'gb2312'); var $ = cheerio.load(html,{decodeEntities: false}); //采用cheerio模块解析html //fs.stat 判断文件夹是否存在 ./2717/ fs.stat("./2717/" + page, (err, stats) => { if(stats){ save($,page) return } // fs.mkdir 没有文件夹就创建文件 fs.mkdir("./2717/" + page, function (err) { if (err) { return console.error(err); } save($,page) }); }); }); }).on('error', function (err) { //http模块的on data,on end ,on error事件 console.log(err); }); } function save($,page){ var imgarr = []; console.log($('.w1200 .w1200 .w110 img').length); $('.w1200 .w1200 .w110 img').each(function (val, index) { var obj = { url: $(this).attr('src'), alt: $(this).attr('alt') } if('夏天少女系清新漂亮美甲背景图片' == $(this).attr('alt')) console.log($(this).attr('src')); imgarr.push(obj) request(encodeURI($(this).attr('src'))).pipe(fs.createWriteStream("./2717/" + page+'/'+$(this).attr('alt')+'.jpg')); }); fs.appendFile("./2717/" + page+'/备注.txt', JSON.stringify(imgarr), 'utf-8', function (err) { if (err) { console.log(err); } }); } for(var i = 1 ;i<12;i++){ url='https://www.2717.com/beautiful/beijingtupian/list_24_'+i+'.html'; getimage(url, i); }
上面的 html 就是页面所有的内容,就跟你谷歌浏览器 f12之后的elements 看到的一样,
这个只能爬静态页面,用ajax渲染的页面爬不到。
本人qq :981900309