Node.js使用robost进行webscraping身份验证

时间:2015-11-27 08:13:12

标签: javascript node.js

我在登录网站以获取数据的帖子请求时遇到问题。我需要提供uname密码并刮掉强大的价值。 我正试图从网站上获取数据。现在整个抓取过程令人困惑。我正在使用Node js。以下是代码:

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

    url = "myweblik";
    //headers: {'content-type': 'application/x-www-form-urlencoded'}

    var j = request.jar();
    var request = request.defaults({jar:j})

    request(url, function(error, response, body) {
      var $ = cheerio.load(body);
      temperature = $("[name='chkLoginForm']").text();  
      console.log(temperature);
    });

    process.stdin.resume();
    process.stdin.setEncoding('utf8');
    process.stdin.on('data', function (chunk) {
     //process.stdout.write('data: ' + chunk);

     if (chunk != 'undefine') {

    var uname = "XXXXX";
    var pwd = "YYYYY";
    var credentials = '?{actionForm.userName}='+uname+'&{actionForm.password}='+pwd+'&{actionForm.qreply}='+chunk;


    request.post({
        uri: 'Myweblink',
            headers: {'content-type': 'application/x-www-form-urlencoded'},
        body: qs.stringify(credentials)
    },
       function(err, res, body){

            if(err) {
            callback.call(null, new Error('Login failed'));
            return;
        }
    request('responsemy weblink', function(err, res, body) {
            if(err) {
                console.log('error occure');
                callback.call(null, new Error('Request failed'));
                return;
            }
    //console.log(body);
            var $ = cheerio.load(body);
            var text = $('.tablebody').text();
    console.log(body);
        });
    });

    }

    });

1 个答案:

答案 0 :(得分:0)

您正在以网址查询格式发送数据。但是,要将发布的数据发送到request,我建议将credentials变量转换为如下所示的对象 -

var credentials = {
    userName : uname,
    password : pwd,
    qreply :chunk
};

然后在您的request POST方法中将此数据发送为 -

request.post({
    uri: 'Myweblink',
    headers: {'content-type': 'application/x-www-form-urlencoded'},
    form: credentials
},

希望这有帮助。

相关问题