我可以在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);
});
});
答案 0 :(得分:0)
所以我说我想在登录后刮掉。我是否用字段ID替换凭据下的用户名和密码?或者是字段名称?
如果这是一个HTML表单,并且它有一个名为username
和password
的输入文本字段,那么在credentials
对象中,您将拥有username
和{{的键1}}就像你现在一样。
此外,我在表单上点击提交(按钮)的部分在哪里?
您正在发出HTTP请求,而不是按下提交按钮。提交按钮通常具有与任何其他表单字段输入一样的名称。如果要包含它,请将其添加到password
对象。