Node.js webscraping身份验证

时间:2014-09-29 20:26:22

标签: javascript node.js

我可以在Python和Ruby中做到这一点,但我想给Node.js一个机会,到目前为止,整个抓取过程令人困惑。我在登录站点以获取数据的帖子请求时遇到问题。这是代码:

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);
    });
});

1 个答案:

答案 0 :(得分:0)

  

所以我说我想在登录后刮掉。我是否用字段ID替换凭据下的用户名和密码?或者是字段名称?

如果这是一个HTML表单,并且它有一个名为usernamepassword的输入文本字段,那么在credentials对象中,您将拥有username和{{的键1}}就像你现在一样。

  

此外,我在表单上点击提交(按钮)的部分在哪里?

您正在发出HTTP请求,而不是按下提交按钮。提交按钮通常具有与任何其他表单字段输入一样的名称。如果要包含它,请将其添加到password对象。