ホームページ  >  記事  >  ウェブフロントエンド  >  Node.js クローラーを使用して Web ページリクエストを実装する方法

Node.js クローラーを使用して Web ページリクエストを実装する方法

亚连
亚连オリジナル
2018-06-12 14:54:491479ブラウズ

この記事では主に 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アップロードコンポーネントを使用する方法

vueでメソッド間の呼び出しを実装する方法

以上がNode.js クローラーを使用して Web ページリクエストを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。