Цитата:
|
i=0
tst=function(){i++; try{tst()}catch(e){console.log(i)}}
tst()
i=0
tst=function(){if(i===30000) return console.log(i); i++; setTimeout(function(){tst()})}
tst()
/*
результат для ноды:
11434
30000
*/
скорей всего для асинхронных вызовов нет ограничений. Но они медленней. UPD хотя на хроме этот код не отрабатывает почему-то, вывода в консоль нет. В ФФ -- ок |
хром 40к без Timeout стек переполнен !
function f (i) {
console.log(1)
if(i > 0) setTimeout(function () {f(i-1)}, 0);
else console.log(i)
}
f(40000)
|
а как вообще парсера пишутся на phantomjs???? Мб. просто маленькие скрипты посоздавать которые будут по одному урлу считывать, а затем создавать процесс и вызывать консоль со скриптом???
А если так сделать, то куки пропадут да? Массив из 5 ссылок нормально спарсить не могу даже. |
можно пошаманить и обойти стек :)
function f (i, t) {
if(t == 10000) {
setTimeout(function () {
console.log(i)
f(i, 0)
}, 0);
}
else if(i) f(i-1, t+1);
}
var a = 100000;
f(a, 0)
|
|
Цитата:
var webpage=require("webpage");
var url=[];
url[0]="http://google.ru";
url[1]="http://microsoft.com";
url[2]="http://kselax.ru";
url[3]="http://cyberforum.ru";
url[4]="http://fl.ru";
url[5]="http://podrobnosti.ua";
var i=0;
pars();
function pars(){
var page=webpage.create();
page.settings.resourceTimeout=10000;
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0';
page.open(url[i],function(status){
if(status=="success"){
console.log("success"+i)
page.render("img"+i+".png");
page.close();
if(++i<url.length){pars();}
else{phantom.exit();}
}
else{
console.log("not success"+i)
page.close();
if(++i<url.length){pars();}
else{phantom.exit();}
}
});
};
А раньше по разному парсило, то 2 страницы, то 3, то урлы разные, а изображения одинаковые, вроде разобрался. Вот с помощью switch типо отлова сообщений
var webpage=require('webpage');
var url=[];
url[0]="http://google.ru";
url[1]="http://microsoft.com";
url[2]="http://kselax.ru";
url[3]="http://cyberforum.ru";
url[4]="http://fl.ru";
url[5]="http://podrobnosti.ua";
var step=1;
var time=500;
var intervalId=setInterval(tick,time);
var i=0;
function tick(){
switch(step){
case 1:{
clearInterval(intervalId);//останавливаем счетчик
step=2;
console.log(url[i]);
var page=webpage.create();
page.settings.resourceTimeout=15000;//время ожидания 15 секунд
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0';
page.open(url[i],function(status){
if(status==="success"){
console.log("success"+i);
page.render("img"+i+".png");
page.close();
i++;
if(i<url.length) {step=1;}
else step=3;
}
else{
page.close();
console.log("not success"+i);
i++;
if(i<url.length) {step = 1;}
else step=3;
}
});
intervalId=setInterval(tick,time);
break;
}
case 2:{
console.log("TICK"+step);
break;
}
case 3:{
clearInterval(intervalId);
phantom.exit();
}
}
}
А от большие парсера походу не сильно удобно будет писать??? Наверно лучше делать с помощью switch чем на функции разбивать. А мб. еще есть какой то лучший способ????? Еще интересно как phantom куки сохраняет, от если я сделаю авторизацию через phantom , потом его закрой и заново открою то я буду авторизован или нет??? Нада проверить. И изображения не ясно как их копировать. От есть урл на изображение http://hsto.org/files/59f/f05/718/59...e54ea5e2b3.png и как его скопировать через phantom? просто загрузить и сохранить? Щас проверю. Хочу попробовать большой парсер написать типо товары напарсить для интернет магазина, я такой на curl писал, а тут не ясно как делать. И как прокси поменять не ясно :) |
никак изображение нимогу сохранитЬ, есть изображение http://hsto.org/files/59f/f05/718/59...e54ea5e2b3.png, загружаю его в браузер и дальше что?
вот код, загружаю страницу и сразу ошибка вылазит
var webpage=require('webpage');
//var fs=require('fs');
var url="http://hsto.org/files/59f/f05/718/59ff0571875a45e79162ebe54ea5e2b3.png";
var page=webpage.create();
page.open(url,function(status){
if(status==="success"){
// page.render("img.png");
// console.log(page.content);
// fs.write("img1.png",page.content,"w");
phantom.exit();
}
else{
phantom.exit();
}
});
Ошибка: E:\project_web\porject2>phantomjs test5.js PhantomJS has crashed. Please read the crash reporting guide at <http://phantomjs.org/crash-reporting.html> and file a bug report at <https://github.com/ariya/phantomjs/issues/new>. Please attach the crash dump file: C:\TEMP\28edde00-9364-4e54-ae01-4cb6df7a9cc8.dmp Если раскоментировать строки, то в img.png изображение но маленькое, а в img1.png испорченое изображение. Нужно как то загрузить, а как хз. Мб. как то можно изображение загрузить по ссылке с помощью просто javaScript без phantomjs???? |
Так что никто не знает как сохранить изображение спомощью javaScript???? Есть ссылка на img, нужно как то его сохранить, все ж просто :)
|
ninja2,
Это не рекурсия, разница в том, что функция выполняется асинхронно. Про сохранение изображений, глянь там есть папка examples, в ней есть похожие примеры. |
| Часовой пояс GMT +3, время: 08:36. |