2014-05-22 1 views
0

요청 모듈을 사용하여 웹 사이트 목록에서 데이터를 가져온 다음 jsdom을 사용하여 DOM을 가져와 일부 작업을 수행합니다.노드 요청이 jsdom과 충돌하는 값이 적어집니다.

일부 웹 사이트는 HTML이 아닌 이상한 콘텐츠를 반환하고 있습니다. 이 이미지에서

werid code returned from a website using request module

데이터는 다음 DOM을 얻을 수 jsdom에 전달되지만이 오류 전달합니다

TypeError: Cannot read property '$' of undefined 

, 내가 이런 일 웹 사이트를 볼 수 있고 왜 나는 확실하지 않다을 스크린 샷에서 횡설수설이 아닌 HTML을 생성합니다 !!

CODE :

request({ 
    uri: linkTarget, 
    method: "GET", 
    timeout: 120000, 
    followRedirect: true, 
    maxRedirects: 5 
}, function(error, response, html){ 

if (!error) { 
    jsdom.env(html, 
     ["http://code.jquery.com/jquery.js"], 
     function (errors, window) {       

      var $ = window.$; // Getting Dom 

      linkHtml = ""; 
      $('body script').remove(); 
      $('body *').each(function() { 
       if($(this).text() !== " "){ 
        linkHtml = linkHtml+$(this).text(); 
       } 
      }); 
+0

do는 콜백 내에서'console.log (errors)'를 수행합니다. 그 가능성이 창 개체를 유효하지 않게 일부 오류가 있습니다 – secretformula

+0

@secretformula 괜찮아, 내가 jsdom 콜백 내에서 & 콘솔 에서이있어'[오류 : 경로는 null 바이트없이 문자열이어야합니다.]' –

+0

@secretformula 문제는 ... 요청 모듈에서 유효한 HTML을 얻고 있지만 일부 웹 사이트에서는 스크린 샷에있는 것과 같이 횡설수설을 반환합니다. –

답변

1

이 내용은 gzip으로 반환됩니다. Use zlib to unzip it :

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

request(params, function (err, res, buffer) { 
    if (err) { error(err); } 
    zlib.gunzip(buffer, function (err, unzipped) { 
    var result = unzipped.toString(); 
    try { 
     result = JSON.parse(result); 
     cb(result); 
    } 
    catch (e) { 
     error(e); 
    } 
    }); 
}); 
관련 문제