const axios = require('axios'); const cheerio = require('cheerio'); const url = require("url"); const fs = require("fs"); // 存放每个页面的 var urlArr = []; // 存放详情地址的 var infoArr = []; // 详情页需要被下载的图片数据 var infoImgArr = [] var infoImgIndex = 0; var infoIndex = 0; var pageIndex = 0; for (var i = 1; i <= 12; i++) { urlArr.push(`https://www.mmav.me/forum-12-${i}.htm`); } getHTML() /** * 用来爬每一页的 假设 1 ~ 100 */ async function getHTML() { console.log(`1: getHTML 的 pageIndex 为:${pageIndex}`); var result = await axios.get(urlArr[pageIndex]); const $ = cheerio.load(result.data); $(".cont .list_info a").each(function () { infoArr.push("https://www.mmav.me/" + $(this).attr("href")) }); getInfo() } async function getInfo() { console.log(`2: getInfo 的 infoIndex 为:${infoIndex}`); var result = await axios.get(infoArr[infoIndex]); const $ = cheerio.load(result.data); $(".imglist li a img").each(function () { var bigImg = $(this).attr("data-original") bigImg = bigImg.replace(/_t\./g, ".") infoImgArr.push("https://www.mmav.me" + bigImg) }); downImg() } async function downImg() { console.log(`3: downImg 的 infoImgIndex 为:${infoImgIndex},被下载的图片地址为:${infoImgArr[infoImgIndex]}`); axios({ method: 'get', url: infoImgArr[infoImgIndex], responseType: 'stream' }).then(function (response) { response.data.pipe(fs.createWriteStream(`img/${imgName(infoImgArr[infoImgIndex])}`)); infoImgIndex += 1 if (infoImgIndex < infoImgArr.length) { downImg() } else { infoImgIndex = 0; infoImgArr = []; infoIndex += 1 if (infoIndex < infoArr.length) { getInfo() } else { infoIndex = 0 infoArr = [] pageIndex += 1 if (pageIndex < urlArr.length) { getHTML() } else { console.log("所有页数下载完成"); } } } }); } function imgName(urlPath) { return url.parse(urlPath).path.split("/pic/")[1].split("/")[1] } // https://www.mmav.me/uploadfile/pic/20210430/467_12_t8JXXgLYcEgtD5IM3kOw.jpg // https://www.mmav.me/uploadfile/pic/20210430/467_12_t8JXXgLYcEgtD5IM3kOw.jpg // https://www.mmav.me/uploadfile/pic/20210430/467_12.JXXgLYcEgtD5IM3kOw.jpg