Files
ClassContent/历届学生/font-end-nine/项目练习/学生项目/杨锐/nodejs/index.js
2024-09-27 02:06:13 +08:00

97 lines
2.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

////爬虫
const request = require('request');
const iconv = require('iconv');
const cheerio = require('cheerio');
const fs = require('fs');
//定义一个变量存放需要爬的网址
var baseUrl = 'https://pic.netbian.com';
//存放页面的地址 数组加下标
var pageArr =[];
var pageIndex = 0
//存放详情页的数组加下标
var hrefArr = [];
var hrefIndex = 0;
//i为页数 如果是第一页就直接向pageArr数组里面添加的首页的地址baseUrl
//否则就向pageArr数组里面添加`${baseUrl}/index_${i}.html`地址
for (var i = 1; i <= 3; i++) {
if (i == 1) {
pageArr.push(baseUrl)
} else {
pageArr.push(`${baseUrl}/index_${i}.html`)
}
}
// 调用getHtml数组加下标作为第一个参数
// 获取网页中.slist li 用each函数来遍历 each(下标,值)
// 如果不包含nextpage
// 就向hrefArr数组里面追加baseUrl(长地址)加this里面找a元素包含的href
//调用requestInfo()
function requestPage() {
getHtml(pageArr[pageIndex], ($) => {
$(".slist li").each(function (index, ele) {
if (!$(this).hasClass("nextpage")) {
hrefArr.push(
`${baseUrl}${$(this).find("a").attr("href")}`
)
}
})
requestInfo()
console.log("hrefArr: ", hrefArr);
})
}
// 定义requestInfo() 方法调用getHtml 数组加下标作为参数
//
function requestInfo() {
getHtml(hrefArr[hrefIndex], ($) => {
request(`${baseUrl}${$(".photo-pic img").attr("src")}`)
.pipe(
fs.createWriteStream(`./img/${ Math.random() * 1000000 + `${Date.now()}` }.jpg`)
)
hrefIndex += 1;
if (hrefIndex < hrefArr.length) {
requestInfo()
} else {
pageIndex += 1
if (pageIndex < pageArr.length) {
requestPage()
}
}
})
}
// 封装request方法为getHtml把地址和回调函数作为参数
function getHtml(url, callback) {
request({
uri: url,
method: 'GET',
encoding: 'binary'
}, function (error, response, body) {
var str2 = iconv.decode(new Buffer(body, 'binary'), 'gbk');
const $ = cheerio.load(str2);
callback($)
});
}