[英]Node.js webscraping authentication with robost
我在登录网站以抓取数据的发布请求中遇到麻烦。 我需要提供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);
});
});
}
});
您正在以url查询格式发送数据。 但是,对于要发送到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
},
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.