用普通方式来爬虫某网站的某一类型的美女图片

//导入require包

let http = require("http");

let fs = require("fs");

let path = require("path");

let cheerio = require("cheerio");

let iconv = require("iconv-lite");

//爬虫指定网站的所有html源码

http.get("http://www.27270.com/ent/meinvtupian/", (response) => {

    let chunks = []

    response.on("data", (chunk) => {

        //将读到的每一份数据存到一个数组中

        chunks.push(chunk)

    })

    response.on("end", () => {

        // 对数据重新进行编解码

        var htmlTar = iconv.decode(Buffer.concat(chunks), 'gb2312');

        //自定义一个解析页面并获取图片资源的方法

        let result = parseHtml(htmlTar);

        //自定义一个下载图片的方法

        download(result)

    })

})

//解析源码,并获取所要下载的图片放到一个数组中

function parseHtml(htmlTar) {

    //加载爬虫下来的html源码

    let $ = cheerio.load(htmlTar);

    let result = []

    //将自己想要的某种类型的图片转成一个数组

    let imgArr = $("div.MeinvTuPianBox>ul>li>a>i>img").toArray();

    imgArr.forEach(img => {

        //遍历数组,并获取其src和alt属性

        let imgSrc = $(img).attr("src");

        let imgAlt = $(img).attr("alt");

        result.push({//将src和alt属性封装成一个对象{},并存入数组中

            imgSrc,

            imgAlt

        })

    })

    return result

}

//下载数组中的图片

function download(result) {

    //自定义一个下载目录

    let dir = "imgs"

    for (let i = 0; i < result.length; i++) {

        //遍历数组中的每个对象,获取src和alt属性

        let downpath = result[i].imgSrc

        let filename = result[i].imgAlt

        http.get(downpath, (response) => {

            //对每个对象进行下载操作,http.get()方法用来获取下载图片的请求

            let extname = path.extname(downpath);//获取图片后缀

            let filepath = path.join(dir, filename + extname)//拼接下载的图片到本地的完整路径

            let writeStream = fs.createWriteStream(filepath);//根据完整路径创建一个写入流

            response.pipe(writeStream)//利用pipe方法,之类response就是一个读入流

        })

    }

}

你可能感兴趣的:(用普通方式来爬虫某网站的某一类型的美女图片)