nodeはページの内容と画像をローカルに保存します
// fs
const fs = require('fs');
// html jquery
const cheerio = require('cheerio');
//
const request = require('request');
//
const https = require('https');
// url
const url = 'https://www.jiemian.com/lists/31.html';
let a = 0;
https.get(url, res => {
let html = '';
// , html
res.setEncoding('utf-8');
//
res.on('data', chunk => {
html+=chunk;
})
//
res.on('end', () => {
const $ = cheerio.load(html);
saveText($);
})
// close
}).on('error', err => {
console.log(err);
});
//
function saveText ($) {
//
const item = $('.list-view .news-view')[a];
//
const tit = $(item).find('.news-header a').text().trim();
//
const src = $(item).find('.news-img img').attr('src');
fs.mkdir(`./content/${tit}`, error => {
if (!error) {
fs.appendFile(`./content/${tit}/main.txt`, `{tit: ${tit}}`, error => {
if (error) {
console.log(' !')
}
})
saveImg(tit, src, $); // ------------1
} else {
saveText($);
a++;
}
})
}
//
function saveImg (tit, src, $) {
// createWriteStream
let writeStream = fs.createWriteStream(`./content/${tit}/${a}.jpg`);
//
let readStream = request(src);
//
readStream.pipe(writeStream);
// //
readStream.on('end', response => {
a++;
if (a <= $('.list-view .news-view').length - 1) {
saveText($)
} else {
console.log(' !')
}
writeStream.end();
})
}
画像処理部については、saveImgの中のコードブロックを------1の场所に置くと、pipe未処理のエラーフローが间违ってしまいます.何が问题なのか分かりません.今の书き方ではOKです.质问を歓迎します.