ホームページ > 記事 > ウェブフロントエンド > Node.js クローラーを使用して Web ページリクエストを実装する方法
この記事では主に Node.js クローラーの Web リクエスト モジュールを紹介し、参考として提供します。
この記事では、Node.js クローラーの Web リクエスト モジュールを紹介し、それを皆さんと共有します。詳細は次のとおりです。
注: 最新バージョンの Nodegrass をダウンロードした場合、一部のメソッドが更新されているため、この記事の例は適用されません。詳細については、オープンソース アドレスの例を確認してください。
1. なぜそのようなモジュールを作成する必要があるのでしょうか?
作者はNode.jsを使ってクローラを書きたいと考えていましたが、公式のNode.js APIが提供するリモートリソースをリクエストする方法は非常に簡単ですが、
http://nodejs.org/api/を参照してください。詳細については、http.html を参照してください。HTTP リクエストには、http.get(options, callback) と http.request(options, callback) の 2 つのメソッドが提供されています。メソッドを見るとわかります。リクエストを取得し、リクエスト メソッドは他のリクエスト メソッド、リクエスト元のホストのポートなどの追加のパラメータを提供します。 Https のリクエストは Http と似ています。最も単純な例:
var https = require('https'); https.get('https://encrypted.google.com/', function(res) { console.log("statusCode: ", res.statusCode); console.log("headers: ", res.headers); res.on('data', function(d) { process.stdout.write(d); }); }).on('error', function(e) { console.error(e); });
上記のコードでは、リモート ホストをリクエストし、応答ステータス、応答ヘッダー、応答本文の内容などの応答情報を取得したいだけです。 get メソッドの 2 番目のパラメータはコールバック関数であり、コールバック関数内で res オブジェクトが別のコールバックを取得し、d (.あなたが要求した応答情報)、それを操作するときに、レイヤーごとにコールバックが再び導入され、最終的には失神する可能性が非常に高くなります。 。 。非同期プログラミングに関しては、同期的な方法でコードを書くことに慣れている一部の学生は非常に混乱しています。もちろん、Lao Zhao の Wind.js など、いくつかの優れた同期ライブラリが国内外で提供されています。こじつけ。実際、get を呼び出したときに最終的に取得したいのは応答情報であり、res.on などの listen プロセスは面倒なので気にしません。毎回 res.on('data',func) するのは嫌なので、今日紹介する nodegrass が生まれました。
2. Nodegrass は、Jquery の $.get(url,func) のようなリソースをリクエストします最も単純な例:
var nodegrass = require('nodegrass'); nodegrass.get("http://www.baidu.com",function(data,status,headers){ console.log(status); console.log(headers); console.log(data); },'gbk').on('error', function(e) { console.log("Got error: " + e.message); });
一見すると、これは公式の get と何ら変わりません。実際、ほぼ = です。 =! res.on('data',func) のイベント監視コールバックの層が欠けているだけです。信じられないかもしれませんが、2 番目のパラメーターもコールバック関数であり、パラメーター データは応答本文の内容、ステータスは応答ステータス、ヘッダーは応答ヘッダーです。応答コンテンツを取得した後、取得したリソースから興味のある情報を抽出できます。もちろん、この例では、単なる単純な印刷コンソールです。 3 番目のパラメータは文字エンコーディングです。現在、Node.js は gbk をサポートしていません。そのため、要求した Web ページのエンコーディングが gbk である場合、Nodegrass は処理を行います。このパラメータを追加するだけです。
https リクエストについてはどうですか?公式APIだとhttpsモジュールを導入する必要がありますが、リクエストのgetメソッドはhttpと似ているので、ちなみにnodegrassでは統合しています。例を見てください:
var nodegrass = require('nodegrass'); nodegrass.get("https://github.com",function(data,status,headers){ console.log(status); console.log(headers); console.log(data); },'utf8').on('error', function(e) { console.log("Got error: " + e.message); });
nodegrass は URL に基づいて http か https かを自動的に識別します。もちろん、URL には http://www.baidu.com/ だけを記述することはできません。 .com/。
投稿リクエストについては、nodegrass が post メソッドを提供します。例を参照してください:
var ng=require('nodegrass'); ng.post("https://api.weibo.com/oauth2/access_token",function(data,status,headers){ var accessToken = JSON.parse(data); var err = null; if(accessToken.error){ err = accessToken; } callback(err,accessToken); },headers,options,'utf8');
上記は、nodegrass の投稿リクエスト access_token API を使用する、accessToken をリクエストする Sina Weibo Auth2.0 の一部です。
get メソッドと比較して、post メソッドは、より多くのヘッダー要求ヘッダー パラメーターとオプション (post データ) を提供します。これらはすべてオブジェクト リテラル タイプです。 …**
例を見てください:var headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length':data.length }; var options = { client_id : 'id', client_secret : 'cs', grant_type : 'authorization_code', redirect_uri : 'your callback url', code: acode };もちろん、プロキシ サーバーははるかに複雑ではありませんが、少なくともローカル ポート 8088 にアクセスすると、次のようになります。ブログパークのページ? nodegrass のオープンソースのアドレス: https://github.com/scottkiss/nodegrass 上記は私が皆さんのためにまとめたもので、将来皆さんのお役に立てれば幸いです。 関連記事:
JavaScriptの再帰的トラバーサルと非再帰的トラバーサル
vueでelement-uiのUploadアップロードコンポーネントを使用する方法
以上がNode.js クローラーを使用して Web ページリクエストを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。