2011-12-06 21 views
3

我對Node.js很陌生,所以如果我不知道我在說什麼,請提前道歉。Node.js刮ASU課程

我試圖從ASU的課程目錄(https://webapp4.asu.edu/catalog/)上刮掉一些課程,並且使用Zombie,Node.IO和HTTPS API進行了大量嘗試。在這兩種情況下,我都遇到了重定向循環。

我想知道是不是因爲我沒有正確設置我的標題?

下面是我使用(不殭屍/ 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

下面是關於如何刮網頁用Node.js的一個完整的文章:HTTP://網。 tutsplus.com/tutorials/javascript-ajax/how-to-scrape-web-pages-with-node-js-and-jquery/ – alessioalex

回答

0

它看起來像服務器設置JSESSIONID cookie,然後重定向,所以你需要告訴node.js不要跟隨重定向,如果你想抓取cookie。我不知道如何使用httphttps程序包來執行此操作,但是您可以通過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' ] 
+0

謝謝!這是跟着重定向,讓我陷入循環。 – btown

0

強烈建議使用jsDOMjQuery(for node)一起使用。我已經使用了很多次,因爲它使它變得非常簡單。

繼承人從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已經使它真正容易破解在一起(至少對我來說)刮實驗。