Как парсить картинки через GET запрос NodeJs?

Сижу уже более 9 часов, помогите разобраться.

Значит все рабоет супер, проблема заключается в том, что я хочу проверить: по такому url есть изображение или нет? А оно перезаписивает и я не могу этого сделать.

var request = require('request'),
    cheerio = require('cheerio'),
    sys = require('sys'),
    http = require('http'),
    token = require('token'),
    crypto = require('crypto'),
    net = require('net'),
    get = require('get'),
    Iconv  = require('iconv').Iconv;

for (var i = 0; i < 5; i++) { // неудачная попытка сделать цикл, хотя работает но request.get перезаписивает 
// переменную и происходит такая ситуация что реально проверяется только одна ссылка на картинку
    var token = crypto.randomBytes(16).toString('hex');  // генерация мд5 на угад парсить думаю
    var url = 'https://wu.wsiz.rzeszow.pl/wunet/photos/s' + token + '.jpg';
request.get({uri: url, method: 'GET', encoding: 'binary' }, function (err, res, body) {

    console.time(url);
    body = new Buffer(body, 'binary');
    var iconv = new Iconv('latin1', 'utf8//IGNORE');
    body = iconv.convert(body).toString();

    var $ = cheerio.load(body);


    var tmp = $('h1').html();
// Если есть h1 значит попало на ошибку и изображения тут нету, проверка ниже
    if (tmp==null)
        console.log('ok='+url+'##############################################');
       // Если заголовка нету, значит есть изображения
    else {
        console.log('fuck %)'+ token);
    }
    console.timeEnd(url);

});}


Нормальное изоброжение - https://wu.wsiz.rzeszow.pl/wunet/photos/se9191809b...
e9191809bf90e68444f1200592ee4c06 - уникальный код 32 символа. s - это соль, .jpg - расширение картинки

Как сделать так, что бы оно не перезаписивало. Хочу сделать это для себя. Интересно или nodejs это может осуществить. Спасибо за ответы.
  • Вопрос задан
  • 4965 просмотров
Пригласить эксперта
Ответы на вопрос 3
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Или почитайте что такое замыкание или этот код не будет работать. Или нельзя объявлять функции внутри цикла или нельзя писать var внутри цикла. Или вы учите JavaScript тут: learn.javascript.ru или ноду тут: learn.javascript.ru/nodejs-screencast а потом лабораторки тут: nodeschool.io

var request = require('request'),
    crypto = require('crypto');

var token, url;
for (var i = 0; i < 5; i++) {
	token = crypto.randomBytes(16).toString('hex');
	url = 'https://wu.wsiz.rzeszow.pl/wunet/photos/s' + token + '.jpg';
	doRequest(url);
}

function doRequest(url) {
    request.get(
    	{ uri:url, method:'GET', encoding:'binary' },
    	function (err, res, body) {
            console.time(url);
            body = new Buffer(body, 'binary');
            console.timeEnd(url);
        }
    );
}
Ответ написан
AMar4enko
@AMar4enko
У вас похоже просто цикл выполняется до конца и процесс завершается. Нода же асинхронная, управление на request.get не блокируется. Почитайте про асинхронность и promise.
Ответ написан
Комментировать
vcdesinger
@vcdesinger Автор вопроса
Web Developer
Спасибо, большое! Подскажите, а память как то можно освободить, потому что при большом цикле - выдает ошибку что памяти не хватает... Может использовать этот модуль?

https://github.com/nodejitsu/forever
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы