2014-06-13 74 views
1

我正在嘗試使用Node.js和網頁抓取。在這種情況下,我試圖從當地的廣播電臺上播放最近播放的歌曲。有了這個特定的網站,body什麼也沒有返回。當我嘗試使用谷歌或任何其他網站時,body有價值。 這是我試圖抓取的網站的一個功能嗎?節點js,請求某些網站的空洞

這裏是我的代碼:

var request = require('request'); 

var url = "http://www.radiomilwaukee.org"; 
request(url, function(err,resp,body) { 
    if (!err && resp.statusCode == 200) { 
     console.log(body); 
    } 
    else 
    { 
     console.log(err); 
    } 

});

回答

1

這很奇怪,您請求的網站似乎不會返回任何內容,除非accept-encoding標頭設置爲gzip。考慮到這一點,使用該要點將工作:https://gist.github.com/nickfishman/5515364

我跑了主旨內的代碼,用"http://www.radiomilwaukee.org"更換網址,看到了sample.html文件中的內容一旦代碼已經完成。

如果你寧願有訪問代碼中的網頁的內容,你可以做這樣的事情:

// ... 

req.on('response', function(res) { 
    var body, encoding, unzipped; 

    if (res.statusCode !== 200) throw new Error('Status not 200'); 

    encoding = res.headers['content-encoding']; 
    if (encoding == 'gzip') { 
     unzipped = res.pipe(zlib.createGunzip()); 
     unzipped.on("readable", function() { 
      // collect the content in the body variable 
      body += unzipped.read().toString(); 
     }); 
    } 

    // ...