zoukankan      html  css  js  c++  java
  • 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 

  • 相关阅读:
    在搜索引擎中输入汉字就可以解析到对应的域名,请问如何用LoadRunner进行测试。
    面向对象
    三种循环结构语句
    JAVA复习题(一)基础知识
    JVM快速入门(上)
    count(*) 优化
    .jquery中$.get()提交和$.post()提交有区别吗?
    window.onload()函数和jQuery中的document.ready()有什么区别?
    假设有一个文本框要求输入10个字符的邮政编码,对于该文本框应该怎样划分等价类?
    软件测试项目从什么时候开始,?为什么?
  • 原文地址:https://www.cnblogs.com/caihua0405/p/10541074.html
Copyright © 2011-2022 走看看