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 

 

posted @ 2019-03-16 10:51  有钱花  Views(506)  Comments(0Edit  收藏  举报