我希望使用nodeJS作为网站抓取工具。我已经实现了一个脚本,可以让我登录系统并从页面解析一些数据。
步骤如下:
1. 打开登录页面 2. 输入登录数据 3. 提交登录表单 4. 转到所需页面 5. 抓取和解析页面上的值 6. 将数据保存到文件中 7. 退出
显然,问题是每次我的脚本都需要进行登录,我想要消除这种情况。我想要实现一种cookie管理系统,在其中可以将cookies保存到.txt文件中,然后在下一次请求期间,可以从文件中加载cookies,并将其发送到请求头中。
这种cookie管理系统不难实现,但问题是如何在nodejs中访问cookies?我发现唯一的方法是使用请求响应对象,在其中可以使用类似以下内容的代码:
步骤如下:
1. 打开登录页面 2. 输入登录数据 3. 提交登录表单 4. 转到所需页面 5. 抓取和解析页面上的值 6. 将数据保存到文件中 7. 退出
显然,问题是每次我的脚本都需要进行登录,我想要消除这种情况。我想要实现一种cookie管理系统,在其中可以将cookies保存到.txt文件中,然后在下一次请求期间,可以从文件中加载cookies,并将其发送到请求头中。
这种cookie管理系统不难实现,但问题是如何在nodejs中访问cookies?我发现唯一的方法是使用请求响应对象,在其中可以使用类似以下内容的代码:
request.get({headers:requestHeaders,uri: user.getLoginUrl(),followRedirect: true,jar:jar,maxRedirects: 10,},function(err, res, body) {
if(err) {
console.log('GET request failed here is error');
console.log(res);
}
//Get cookies from response
var responseCookies = res.headers['set-cookie'];
var requestCookies='';
for(var i=0; i<responseCookies.length; i++){
var oneCookie = responseCookies[i];
oneCookie = oneCookie.split(';');
requestCookies= requestCookies + oneCookie[0]+';';
}
}
);
现在,变量requestCookies
的内容可以保存到.txt文件中,并在下次脚本执行时加载,这样就可以避免每次执行脚本时都需要登录用户的过程。
这是正确的方法吗?还是有一种返回cookies的方法?
注意:如果您想设置您的request
对象在每次后续请求中自动重新发送接收到的cookie,请在对象创建过程中使用以下行:
var request = require("request");
request = request.defaults({jar: true});//Send cookies on every subsequent requests
fs
模块甚至是localstorage实现。 - Pogrindis