2017-04-01 2 views
0

Node.jsでウェブページを削り取ろうとしています。ウェブページをスクラップしようとすると最大リダイレクトを超えていますか?

var request = require('request').defaults({maxRedirects:3}); 


let url = "https://webapp4.asu.edu/catalog/classlist?k=81684&t=2177&e=all&hon=F&promod=F" 
// , qs:propertiesObject 
request({url:url}, function(err, response, body) { 
    if(err) { console.log(err); return; } 
    console.log("Get response: " + response.statusCode); 
}); 

何らかの理由でリダイレクトの数が最大限に増えています。私はpostmanで取得リクエストを行うことができ、私はちょうど良いページを訪問することができます。リダイレクトが発生する原因は何ですか?

+0

なぜあなたのURLにあるpropertiesObjectに同じクエリパラメータを渡していますか?ほとんどの場合、 "https://webapp4.asu.edu/catalog/classlist"のようなURLを持つことになり、{k: '81684'、t: '2177'のようなクエリオブジェクトを渡します。 e: "all"、hon: "F"、promod: "F"}。 – user2263572

+0

申し訳ありませんが、それはタイプミスでした。私はその要求にそれを持っていませんでした。 –

+0

あなたは ".defaults({maxRedirects:3});"結果は変わるのでしょうか?私は、リクエストのデフォルトは10と思っており、あなたが見たいページに応じて3が低すぎるかもしれません。 – user2263572

答えて

1

ベストプラティス:ウェブページをスクラップする前に、常にrobots.txtファイルを確認する必要があります。私はこの特定のサイトのために1つを見つけることができませんでしたが、あなたが掻き取りを許可しないサイトに出くわしたら、すべてのルールに従うべきです。

言われているように、あなたのスクレーパーが発信リクエストにヘッダーがないため、無限のリダイレクトループに陥っているようです。

次のようなものがありますが、情報を抽出するためにはどのような解析が必要かを判断する必要があります。

var request = require('request'); 

var options = { 
    url: 'https://webapp4.asu.edu/catalog/classlist?k=81684&t=2177&e=all&hon=F&promod=F', 
    headers: { 
    "method":"GET", 
    "path":"/catalog/classlist?k=math&t=2177&e=all&hon=F&promod=F", 
    "scheme":"https", 
    "accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 
    "accept-encoding":"gzip, deflate, sdch, br", 
    "accept-language":"en-US,en;q=0.8", 
    "cache-control":"no-cache", 
    "cookie":"JSESSIONID=javaprod19~413DF4150236B1466C8ECB85EB796C06.catalog19; onlineCampusSelection=C; __cfduid=d5e9cb96f2485f7500fec2116ee8f23381491087061; __utma=59190898.1874896314.1491088625.1491088625.1491088625.1; __utmb=59190898.2.10.1491088625; __utmc=59190898; __utmz=59190898.1491088625.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utma=137925942.2000995260.1491087063.1491087063.1491088718.2; __utmb=137925942.2.10.1491088718; __utmc=137925942; __utmz=137925942.1491088718.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); ADRUM=s=1491089349546&r=https%3A%2F%2Fwebapp4.asu.edu%2Fcatalog%2Fclasslist%3F-1275642430", 
    "pragma":"no-cache", 
    "referer":"https://webapp4.asu.edu/catalog/", 
    "upgrade-insecure-requests":"1", 
    "user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" 
    } 
}; 

function callback(error, response, body) { 

    console.log(response.body) 

} 
request(options, callback); 
+0

興味深い..何とかこれをスピードアップすることは可能ですか? postmanのようなアプリケーションは、即座にデータを取得します。最大リダイレクト数を1200に増やしましたが、まだ結果が得られていません。 –

+0

更新:1200出力が「最大リダイレクトを超えました」 –

+0

更新された回答をご覧ください。 – user2263572

関連する問題