рдкрд╣рд▓реЗ, рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп JSDOM рдерд╛, рдЬреЛ рдЕрддреНрдпрдзрд┐рдХ рднрд╛рд░ рд╕реЗ рдкреАрдбрд╝рд┐рдд рдерд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдзреАрдорд╛ рдХрд░ рджрд┐рдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рд╕рдордп рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдФрд░
рдЪреАрдпрд░рд┐рдпреЛ рдЖ рдЧрдпрд╛ рд╣реИред рд╡рд╣ рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЕрдзрд┐рдХрддрд╛ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╡рд╣ рдЦреБрдж jQuery рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдФрд░ рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдпрд╣ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдЧреЗрдХреНрд╕рдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рдЖрдкрдХреЛ рдЕрдВрддрддрдГ рдПрдХ рдЧреИрд░-рдирд┐рд░реЛрдзрд╛рддреНрдордХ рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ xml рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЖрдкрдХреЛ рдЗрд╕реЗ {xmlMode: true} рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдиреЛрдбрдЬреЗрдПрд╕ рдкрд░ рдХреИрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗ
рд╣рдо
Q рдХреЛ Defered рдмрдирд╛рдиреЗ рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрддрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд╕рд╛рдордЧреНрд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП
рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╕реНрд╡рдпрдВ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдЪреАрдпрд░рд┐рдпреЛ ред
рдирд┐рд░реНрд╡рд╛рдд рд╕рдВрдЦреНрдпрд╛ 1 рдореЗрдВ рдЙрджрд╛рд╣рд░рдг
request(url, function(err, res, body){ if(err){console.log(err);} else{ $ = cheerio.load(body); var cards = []; $('.card').each(function(){ cards.push({ title:$('.title',this).text(), url:$('a',this).attr('href') }); }); } }
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рдкреЗрдЬ рдХреЛ рд╕реНрдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдкреГрд╖реНрда рд╣реЛрдВ? рдЕрдЧрд░ рд╣рдо рдкреНрд░реЙрдорд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╣реЗрдб-рдСрди рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ 2 рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдВрдЧреАред рдкрд╣рд▓рд╛ рд╕реНрдЯреИрдХ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рджреВрд╕рд░рд╛ рд╕реНрдХреЛрдк рдХреЗ рджреЛрд╣рд░рд╛рд╡ рд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд╕рднреА рдмреБрд░рд╛рдИ рдХреА рдЬрдбрд╝ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╛рд░реНрдп рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╕рдордп рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдУрд╕реНрдкреНрд░реЗ рдХреЗ рд╕реНрддрд░ рдХреЛ рдмрдврд╝рд╛рдП рдмрд┐рдирд╛ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрддрд╛рд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ 2 рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
рдЪрд░рдг 1: рдкреЗрдЬрд┐рдиреЗрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреГрд╖реНрда рд▓реЗрдирд╛ рдФрд░ рдХреБрд▓ рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ред
рд╕реНрдЯреЗрдЬ 2: рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрддрд╛рд░ рдмрдирд╛рдирд╛ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣реБрдХ рдХрд░рддреЗ рд╣реИрдВред
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрддрд╛рд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ 2 рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкрд╣рд▓рд╛: рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╕рдмрд╕реНрдХреЙрдк рдмрдирд╛рддреЗ рд╣реИрдВ (рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рд╢реЛрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ):
for(var i = 0; i<l;i+=){ chain.then(asyncF.bind({page: i})); }
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЗрд╕ рдкреГрд╖реНрда рд╕реЗ рд╕рдВрджрд░реНрдн рдХрд╛ рдПрдХ рд░реАрдбрд┐рдВрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рдЕрдиреНрдп рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡реИрд╢реНрд╡рд┐рдХ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд╣реЛ, рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдирдВрдмрд░ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░реЗрдВ рдЬреЛ рдХрд┐ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдврд╝ рдЬрд╛рдПрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдПрдХ рдирд┐рд░реНрд╡рд╛рдд рдирдВрдмрд░ 2 рдореЗрдВ рдЙрджрд╛рд╣рд░рдг
рдЕрджреНрдпрддрди:
Node.JS рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдореБрджреНрджреЛрдВ рдХреЛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ:рдЙрди рдПрдиреНрдХреЛрдбрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдиреЛрдб.рдЬреЗрдПрд╕ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЛ рдмрдлрд╝рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд╢реВрдиреНрдп рдФрд░ рдлрд┐рд░,
рдЖрдЗрдХрдирд╡ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╛рд░реНрд╕ рдХрд░реЗрдВред
рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг
var request = require('request'); var Iconv = require('iconv').Iconv; var fromEnc = 'cp1251'; var toEnc = 'utf-8'; var translator = new Iconv(fromEnc,toEnc); request( { url:'http://winrus.com/cpage_r.htm', encoding:null }, function(err,res,body){ console.log(translator.convert(body).toString()); } );