2014-09-29 77 views
0

我可以在Python和Ruby中做到這一點,但我想給Node.js一個鏡頭,迄今爲止整個刮擦過程都令人困惑。我無法登錄到網站以提取數據。這裏是代碼:Node.js webscraping認證

var request = require('request'); 
var cheerio = require('cheerio'); 

var credentials = { 
    username: 'kevin', 
    password: 'secret' 
}; 

request.post({ 
    uri: 'http://yourwebsite.com/login', 
    headers: { 'content-type': 'application/x-www-form-urlencoded' }, 
    body: require('querystring').stringify(credentials) 
}, function(err, res, body){ 
    if(err) { 
     callback.call(null, new Error('Login failed')); 
     return; 
    } 
}); 

所以說我想在我登錄後刮。我是否更換憑證與字段ID下的用戶名和密碼?或者它是字段名稱?另外,我正在點擊提交(按鈕)的部分在哪裏?

編輯: 下面是我嘗試了一些其他網站的完整代碼:

var cheerio = require('cheerio'); 
var request = require('request'); 


var credentials = { 
    acct: '....', 
    pw: '.....' 
}; 

request.post({ 
    uri: 'https://news.ycombinator.com/login?whence=news', 
    headers: { 'content-type': 'application/x-www-form-urlencoded' }, 
    body: require('querystring').stringify(credentials) 
}, function(err, res, body){  

    request('https://news.ycombinator.com', function(err, res, body) { 
     if(err) { 
      callback.call(null, new Error('Request failed')); 
      return; 
     } 

     var $ = cheerio.load(body); 
     var text = $('.pagetop').text(); 

     console.log(text); 
    }); 
}); 
+0

得到類似[_Charles Proxy_](http://www.charlesproxy.com/)的安裝。在網絡瀏覽器中自己發出請求。看看發送到服務器的內容。然後,你會對你需要從你的'node.js'代碼發送的東西有個好主意。 – 2014-09-29 20:49:47

+0

謝謝我會研究它。 – user1452530 2014-09-29 21:08:47

回答

0

所以說我想刮我登錄後我就是從下憑證更換用戶名和密碼。字段ID?或者它是字段名稱?

如果這是一個HTML表單,它有輸入文本字段命名爲usernamepassword,然後在credentials對象,你將不得不鍵usernamepassword就像你現在要做的。

此外,我正在點擊提交(按鈕)在窗體上的部分?

您正在發出HTTP請求,而不是提交按鈕。提交按鈕通常有一個名稱,就像任何其他表單字段輸入一樣。如果您想要包含它,請將其添加到您的credentials對象中。

+0

如果輸入文本字段名稱設置爲「user [email]」,該怎麼辦?好吧,我會嘗試添加憑證上的表單字段輸入名稱。 – user1452530 2014-09-29 20:53:33

+0

@ user1452530在這種情況下,請在您的密鑰周圍加上引號。 'var credentials = {'user [email]':'[email protected]'}' – Brad 2014-09-29 20:55:20

+0

由於某種原因,它仍然不會登錄。我使用其他網站上的示例更新了我的代碼。 – user1452530 2014-09-29 21:05:27