2014-09-29 78 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