以下是 Node.js 脚本。它下载div中包含的图像。该循环适用于 9.86%,最高 id = 36. 当id> 36它退出循环。我正在使用节点0.12版本。循环需要在完成之前运行365次次。我使用了递归回调的方法。
代码:
//Required modules
var fs = require('fs'),
cheerio = require('cheerio'),
request = require('request');
//Default Variables
var baseURI = 'http://www.website/';
var year = 2013;
var id = 1;
var savePath = process.argv[2];
//Download Function
var download = function(uri, filename, callback){
request({ uri: uri }, function(err, res, body){
var $ = cheerio.load(body);
var imgDiv = $('#img-wallpaper').children()['0'];
if(err)
console.err(err);
if(typeof imgDiv !== 'undefined') {
request(imgDiv.attribs.src).pipe(fs.createWriteStream(filename)).on('close', callback);}
});
};
//Main Function
console.log("Downloading . . .");
// Loop function to create a recursive effect
(function loop(){
download(baseURI+year+'/'+id+'/wallpaper/', savePath+id+'.jpg',
function(){
console.log(((id/365)*100).toFixed(2)+'% completed');
if(id == 330)
year = "2014";
if(((id/365)*100) != 100){
id=id+1;
loop();}
});
})(1)
答案 0 :(得分:1)
我是否理解正确如果您将id
的起始值设置为超过35(36?),则脚本不会下载任何图像?
通过仅更改变量,在固定的uri和固定图像上测试脚本。脚本有望成功吗?如果是这种情况:
body request
typeof imgDiv !== 'undefined'
request image
因此,当其中一个点出现错误时,脚本就会停止工作。有必要改变条件的严重程度。
答案 1 :(得分:0)
正如@stdob所说,错误是由于
引起的虽然答案不是克服错误的正确方法,但它更像是一种黑客攻击类型。它会忽略错误并继续脚本!
if(typeof imgDiv !== 'undefined') {
request(imgDiv.attribs.src).pipe(fs.createWriteStream(filename)).on('close', callback);
}
else{
id++;
request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
}