2017-08-08 67 views
1

我想在NodeJS中下載頁面(https://www.csfd.cz/tvurce/65871),但我只是得到隨機數據。無法在NodeJS中下載頁面

�}Ms�F������+i"��)�Jْ;�e���7�KM0��LƩ��]��Yg��b�� 
                Ow7U��J�#�K�9��L 

我認爲這是錯誤的編碼,但即使大小是錯誤的(下載頁面有44K,而這個文件只有19K。什麼是更令人驚訝的是,簡單的蟒蛇下載它的作品好。
Python代碼:

import requests 
url = "https://www.csfd.cz/tvurce/65871" 
r = requests.get(url) 
with open('pyth.txt','wb') as handle: 
    handle.write(r.content) 

JavaScript代碼:

const request = require('request-promise') 
const fs = require('fs') 
request('https://www.csfd.cz/tvurce/65871').then((html) => { 
    fs.writeFileSync('output.html', html) 
}) 

我也試着像request.get其他方法與對參數等,但仍然是相同的結果。你能告訴我我做錯了什麼嗎?

回答

1

在請求模塊中使用壓縮選項,請參閱請求模塊示例(https://github.com/request/request)。

你需要還followRedirect和followAllRedirect參數自動跟隨301和302重定向的Cuz您的請求返回302:

curl -X GET https://www.csfd.cz/tvurce/65871 --compressed -v -i 

Response : 302 
<h1>Redirect</h1> 

<p><a href="https://www.csfd.cz/tvurce/65871-kit-harington/">Please 
click here to continue</a>.</p> 

除了標準WriteFile函數替換您的writeFileSync

const request = require('request') 
const fs = require('fs') 

request.get({ 
    url:'https://www.csfd.cz/tvurce/65871', 
    gzip: true, 
    followRedirect: true, 
    followAllRedirect: true 
}, function(err, response, body){ 
    if(err || !response || response.statusCode != 200) 
    { 
     // error case, do stg 
    } 
    else 
    { 
     fs.writeFile('output.html', body, "utf8", function(err){ 

     if(err) 
     { 
      // error do stg 
     } 
     else 
     { 
      // success 
     } 
     }); 
    } 

}) 
0

閱讀Content-Encoding標題。它很可能是壓縮的,這將解釋尺寸的差異。

1

我嘗試了不同的東西,不同的選項和編碼,一些解析器,我沒有得到它與requestrequest-promise。從文檔中,我會說你沒有做錯任何事情。

我試了一個不同的模塊,unirestnpm install unirest --save),它開箱即用。

const unirest = require('unirest'); 
const fs = require('fs'); 

var Request = unirest.get('https://www.csfd.cz/tvurce/65871') 
    .end(function(res) { 
     console.log(res.body); 
     fs.writeFileSync('output.html', res.body) 
    }); 

希望這有幫助。