-2
我試圖使用節點腳本下載網站上的每個圖像。使用node.js從網站下載圖像
我寫了它,大部分它似乎工作,但是,它只是下載第一張圖片。它下載它等於網站上的圖像數量。
這是我的代碼。
const http = require('http'),
cheerio = require('cheerio'),
fs = require('fs');
var document = '';
var imageData = '';
http.get('http://www.wikihow.com/Start-a-Blog', function(res){
res.on('data', function(chunk){
document+=chunk;
})
res.on('end', function(){
let $ = cheerio.load(document);
var array = [];
var array = $("img").toArray();
var data = [];
array.forEach(function (ele) {
if (ele.attribs.src !== undefined)
data.push(ele.attribs.src);
})
var counter = 0;
data.forEach(function (ele) {
ripImage(ele, counter);
counter ++;
})
})
});
function ripImage(ele, counter){
http.get(ele, function(res){
console.log(res);
res.setEncoding('binary')
res.on('data', function(chunk){
imageData += chunk;
})
res.on('end', function(){
//console.log(ele);
fs.writeFile("dump/file" + counter + ".jpg", imageData, 'binary', function(err){
if (err) throw err
//console.log('File saved.')
});
//res.pipe(file);
})
});
}
我認爲問題出在ripImage()函數的某處。如果你們能看到這個問題,並幫我解決這個問題,那會非常感激。
謝謝你們。
您可以使用異步隊列,cheerio和請求。我不明白你爲什麼使用http請求的低執行。一個隊列和一個兩個功能可能會更簡單。 – Gntem
我試圖儘可能少地利用資源來學習更多的東西。我對Node還比較陌生,所以我只是掌握了一些東西。 – Gwinert