node.jsでループの各実行を(適切に)追加する方法

djsnoob

だから私はグーグルパーサーを書こうとしています。私のツールのアイデアは、検索クエリを受け取り、グーグルでそれらを検索し、URLを返すことです。これまでは正常に機能していますが、ページ構成を設定しようとして問題が発生した場合、コードは次のようになります。

const needle = require("needle") //for making get request
const sp = require("serp-parser") //for parsing data from the request
const queryup = "watch movies online free" //my search data
const query = encodeURI(queryup) //my search data so google can read it
var page = 0; //initializing the page counter
let pages = 5; //setting amount of pages to loop through
for (var i = 0; i < pages; i++) { //my loop
  needle.get(`https://www.google.com/search?q=${query}&start=${page}`, function(err, response){ //MY MAIN PROBLEM <<<--- The issue is its adding to the page value but its not effecting it here, why?
    page += 10 //adding to page value (every 10 page value is 1 extra page)
    console.log(`----- Page number: `+ page / 10+" -----") //logging the number of the page to confirm that it is indeed increasing the page value
    let results = response.body; //defining the body of my request
    parser = new sp.GoogleNojsSERP(results); //initializing the parser
    let parsed = parser.serp //parsing the body
    let objarray = parsed.organic; //parsed body (returns as an array of json objects)
    for (var i = 0; i < objarray.length; i++) { //loop the logging of each url
      let url = objarray[i].url //defining url
      console.log(url) //logging each url
    }
  });
}

10億のコメントなし:

const needle = require("needle") 
const sp = require("serp-parser") 
const queryup = "watch movies online free"
const query = encodeURI(queryup) 
var page = 0;
let pages = 5; 
for (var i = 0; i < pages; i++) {
  needle.get(`https://www.google.com/search?q=${query}&start=${page}`, function(err, response){ 


    //^^^^^ MY MAIN PROBLEM <<<--- The issue is its adding to the page value but its not effecting it here, why?



    page += 10 
    console.log(`----- Page number: `+ page / 10+" -----")
    let results = response.body;
    parser = new sp.GoogleNojsSERP(results);
    let parsed = parser.serp
    let objarray = parsed.organic;
    for (var i = 0; i < objarray.length; i++) {
      let url = objarray[i].url
      console.log(url)
    }
  });
}
JType

これは非同期の問題のようです。私は針に精通していませんが、外部クエリは基本的に同期されないことを知っています。

発生している問題は、基本的に、ループが最初に実行された後に実際のWebクエリが発生し、すでにpage50にインクリメントさていることです。次に、非同期が複雑で管理が難しいため、それぞれがpage = 50の5つのクエリが作成されます。

内部的には、エンジンは基本的に、最初に実行できる可能性のある他のすべてを文字通り実行し、次にWebクエリを実行します。

通じ旅needleNPMドキュメントを使用すると、その後、非同期関数で包み、使用して管理することができ、代わりに約束を返すために、針を取得するために、代替構文を使用することができると言われますawait:あなたは後にしているものである、同期動作を強制します

const needle = require('needle');
const sp = require('serp-parser');
const queryup = 'watch movies online free';
const query = encodeURI(queryup);
let page = 0;
const pages = 5;

const googler = async function () {
  for (let i = 0; i < pages; i++) {
    try {
      const response = await needle('get', `https://www.google.com/search?q=${query}&start=${page}`);// MY MAIN PROBLEM <<<--- The issue is its adding to the page value but its not effecting it here, why?
      console.log('----- Page number: ' + page / 10 + ' -----');
      const results = await response.body;
      const parser = new sp.GoogleNojsSERP(results);
      const parsed = parser.serp;
      const objarray = parsed.organic;
      for (let i = 0; i < objarray.length; i++) {
        const url = objarray[i].url;
        console.log(url);
      }
    } catch (err) {
      console.error(err);
    }
    page += 10;
  }
};

googler();

主な違い:

  1. パーneedleドキュメント、リクエストメソッドが上の方法であることではなくneedleオブジェクトは、代わりにあなたが呼び出しに直接渡す最初の引数のneedle関数としての地位を。
  2. awaitpromiseを管理すると、拒否されたpromiseはエラーをスローしますが、これは従来のtry / catchブロックでキャッチする必要があります。私はここでそれをしました。とはいえ、もしそれneedlenode-fetch基本的にエラーをスローすることはおそらくないでしょうが、それ良い習慣です。

私の拡張機能の1つは、var宣言をに自動的に変更し、let再割り当てされていないlet宣言をconst;に変更しましたそれらを元に戻すことを歓迎します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

一括INSERTでNode.jsのmysql / sqlstringを使用して適切にエスケープする方法は?

分類Dev

どちらの方法がより便利です各実行の間にスリープを伴うエンドレスループで非同期関数を実行します(Node.js / Vanilla JS)

分類Dev

Node.js適切なタイミングでのみサービスを実行する

分類Dev

Node js、ループ後にコード同期を実行する方法

分類Dev

誰かELI5がnode.jsでオフラインのGoogleoauth2を適切に実行する方法はありますか?

分類Dev

node.jsでmodule.exportsを適切に使用する方法は?

分類Dev

Node.JSのアプリケーションルートに関連するファイルを参照する適切な方法

分類Dev

node.jsアプリで追加のモジュールを要求する方法

分類Dev

Node.js:同じサーバーで複数の異なるアプリを実行してCPU使用率を最適化する方法は?

分類Dev

Nodeで複数のシーケンシャルMSSQLクエリを(適切に)チェーンする方法

分類Dev

node.jsプロジェクトでMySQLレプリカを読み書きするためのDBクエリを実装する適切な方法は?

分類Dev

Node.js:非同期モジュールでエンドレスループを実行する方法

分類Dev

Node.js:最も簡単な方法でutil.promisifyをmysqlプールに適用する方法は?

分類Dev

Node js exec git cloneを1行で実行するときに、ターミナルに公開鍵のパスフレーズを入力する方法

分類Dev

node.jsのGoogleAppEngineでnightmare.jsを実行する方法

分類Dev

gruntでnode.jsアプリを実行する方法は?

分類Dev

IonicモバイルアプリでNode.jsサーバーを実行する方法は?

分類Dev

node.jsサーバーでJavaScriptを実行する方法

分類Dev

Dockerで2つのnode.jsアプリとmysqlを実行する方法

分類Dev

Node JSのデータを含む変数のみを使用する適切な方法は何ですか?

分類Dev

readlineを持つ関数は、応答を取得する前にforループで実行されます(Node.Js)

分類Dev

Node.jsでpgを使用してPostgresqlデータベースを適切にクエリする方法は?

分類Dev

node.jsで単純なpromiseを適切にデバッグする方法は?

分類Dev

Node.jsとnpmのインストール後にライブサーバーを実行する方法

分類Dev

node.js postgresqlモジュールを使用する適切な方法は何ですか?

分類Dev

Node.jsモジュールの初期化を正しく実行する方法

分類Dev

node.js、express-同期的にループ内でmysqlクエリを次々に実行する

分類Dev

Node.jsにpromise.allを追加する方法findOrCreateをループで続編しますか?

分類Dev

node.jsのawsでcronジョブを実行する方法

Related 関連記事

  1. 1

    一括INSERTでNode.jsのmysql / sqlstringを使用して適切にエスケープする方法は?

  2. 2

    どちらの方法がより便利です各実行の間にスリープを伴うエンドレスループで非同期関数を実行します(Node.js / Vanilla JS)

  3. 3

    Node.js適切なタイミングでのみサービスを実行する

  4. 4

    Node js、ループ後にコード同期を実行する方法

  5. 5

    誰かELI5がnode.jsでオフラインのGoogleoauth2を適切に実行する方法はありますか?

  6. 6

    node.jsでmodule.exportsを適切に使用する方法は?

  7. 7

    Node.JSのアプリケーションルートに関連するファイルを参照する適切な方法

  8. 8

    node.jsアプリで追加のモジュールを要求する方法

  9. 9

    Node.js:同じサーバーで複数の異なるアプリを実行してCPU使用率を最適化する方法は?

  10. 10

    Nodeで複数のシーケンシャルMSSQLクエリを(適切に)チェーンする方法

  11. 11

    node.jsプロジェクトでMySQLレプリカを読み書きするためのDBクエリを実装する適切な方法は?

  12. 12

    Node.js:非同期モジュールでエンドレスループを実行する方法

  13. 13

    Node.js:最も簡単な方法でutil.promisifyをmysqlプールに適用する方法は?

  14. 14

    Node js exec git cloneを1行で実行するときに、ターミナルに公開鍵のパスフレーズを入力する方法

  15. 15

    node.jsのGoogleAppEngineでnightmare.jsを実行する方法

  16. 16

    gruntでnode.jsアプリを実行する方法は?

  17. 17

    IonicモバイルアプリでNode.jsサーバーを実行する方法は?

  18. 18

    node.jsサーバーでJavaScriptを実行する方法

  19. 19

    Dockerで2つのnode.jsアプリとmysqlを実行する方法

  20. 20

    Node JSのデータを含む変数のみを使用する適切な方法は何ですか?

  21. 21

    readlineを持つ関数は、応答を取得する前にforループで実行されます(Node.Js)

  22. 22

    Node.jsでpgを使用してPostgresqlデータベースを適切にクエリする方法は?

  23. 23

    node.jsで単純なpromiseを適切にデバッグする方法は?

  24. 24

    Node.jsとnpmのインストール後にライブサーバーを実行する方法

  25. 25

    node.js postgresqlモジュールを使用する適切な方法は何ですか?

  26. 26

    Node.jsモジュールの初期化を正しく実行する方法

  27. 27

    node.js、express-同期的にループ内でmysqlクエリを次々に実行する

  28. 28

    Node.jsにpromise.allを追加する方法findOrCreateをループで続編しますか?

  29. 29

    node.jsのawsでcronジョブを実行する方法

ホットタグ

アーカイブ