我在登录网站以获取数据的帖子请求时遇到问题。我需要提供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);
});
});
}
});
答案 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
},
希望这有帮助。