我对Node.js很新,如果我不知道我在说什么,请提前道歉。
我正在尝试从ASU的课程目录(https://webapp4.asu.edu/catalog/)中删除一些课程,并使用Zombie,Node.IO和HTTPS api进行了大量尝试。在这两种情况下,我都遇到了重定向循环。
我想知道是不是因为我没有正确设置标题?
下面是我使用的示例代码(不是Zombie / Node.IO):
var https = require('https');
var option = {
host: 'webapp4.asu.edu',
path: '/catalog',
method: 'GET',
headers: {
'set-cookie': 'onlineCampusSelection=C'
}
};
var req = https.request(options, function(res) {
console.log("statusCode: ", res.statusCode);
console.log("headers: ", res.headers);
res.on('data', function(d) {
process.stdout.write(d);
});
});
为了澄清一下,我在使用Node.js进行抓取时遇到了麻烦。然而,更具体地说,ASU的课程目录给我带来了麻烦。
感谢你们给我的任何想法,谢谢!
更新:如果我使用从Chrome / FF获得的JSESSIONID创建cookie,我的请求已成功完成。我有办法请求/创建一个JSESSIONID吗?
答案 0 :(得分:0)
我强烈建议您将jsDOM 与jQuery(for node)结合使用。我已经多次使用它来进行scaping,因为它非常容易。
以下是jsdom自述文件中的例子:
// Count all of the links from the nodejs build page
var jsdom = require("jsdom");
jsdom.env("http://nodejs.org/dist/", [
'http://code.jquery.com/jquery-1.5.min.js'
],
function(errors, window) {
console.log("there have been", window.$("a").length, "nodejs releases!");
});
希望有所帮助,jsdom让你很容易破解实验(至少对我而言)。
答案 1 :(得分:0)
看起来服务器设置JSESSIONID cookie然后重定向,所以如果你想获取cookie,你需要告诉node.js不要遵循重定向。我不知道如何使用http
或https
软件包执行此操作,但是您可以通过npm:request
获得另一个软件包,它可以让您执行此操作。这是一个可以帮助您入门的示例:
var request = require("request");
var options = {
url: "https://webapp4.asu.edu/catalog/",
followredirect: false,
}
request.get(options, function(error, response, body) {
console.log(response.headers['set-cookie']);
});
输出应该如下所示:
[ 'JSESSIONID=B43CC3BB09FFCDE07AE6B3B702717431.catalog1; Path=/catalog; Secure' ]