Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript get请求,在Node.js中的get请求外部循环和发送数据_Javascript_Node.js_Asynchronous_Callback_Cheerio - Fatal编程技术网

Javascript get请求,在Node.js中的get请求外部循环和发送数据

Javascript get请求,在Node.js中的get请求外部循环和发送数据,javascript,node.js,asynchronous,callback,cheerio,Javascript,Node.js,Asynchronous,Callback,Cheerio,我正在尝试编写一个scraper,它将加载一堆关键字并在Amazon上搜索它们。然后我需要使用关键字并在页面上搜索它,以查看有多少实例 我到处搜索,看到人们使用术语异步函数和回调,但我不知道它们是什么意思,每次解释都让我不知所措。我试着用谷歌搜索那些术语,但我还是不明白 这是我的代码,显然它不起作用。如果有一个简单的方法来完成我想用我现有的知识做的事情,那就太好了 // load modules var request = require('request'); var cheerio = re

我正在尝试编写一个scraper,它将加载一堆关键字并在Amazon上搜索它们。然后我需要使用关键字并在页面上搜索它,以查看有多少实例

我到处搜索,看到人们使用术语异步函数和回调,但我不知道它们是什么意思,每次解释都让我不知所措。我试着用谷歌搜索那些术语,但我还是不明白

这是我的代码,显然它不起作用。如果有一个简单的方法来完成我想用我现有的知识做的事情,那就太好了

// load modules
var request = require('request');
var cheerio = require('cheerio');

//split into array
keywords = ["books", "bags", "shoes"];

// loop task for every keyword
global.i
for (i = 0; i < keywords.length; i++) { 
console.log(keywords[i] + " was loaded.");

// get request
request('https://www.amazon.com/s/?url=field-keywords=' + keywords[i], function (error, response, html) {
  if (!error && response.statusCode == 200) {
    var $ = cheerio.load(html); 

    // try to use the keyword (doesn't work)
    console.log(keywords[i]);

  } // end get request
}); // get request end

// Try to use the html outside get request (doesn't work)
console.log(html);

} // loop end
//加载模块
var请求=要求(“请求”);
var cheerio=需要('cheerio');
//拆分为数组
关键词=[“书”、“包”、“鞋”];
//循环每个关键字的任务
全球
对于(i=0;i
根据您发送的请求,服务器(此处为Amazon)需要一些时间来响应。一般来说,这将小于600毫秒。因此,javascript不再等待那么长的时间,而是继续执行到下一行。所以,当您在for循环中时,您发出一个请求,脚本继续执行。又提出了2项请求。因此,所有3个请求都已发出,等待响应。同时,执行继续到下一行。 此时,应用程序范围中的任何地方都没有定义变量html。所以它确实抛出了错误。即使在收到3个响应之后,也不会定义变量html,因为它的作用域在响应函数中。您可以在request的回调函数中使用变量html,如下所示

// load modules
var request = require('request');
var cheerio = require('cheerio');

//split into array
keywords = ["books", "bags", "shoes"];

// loop task for every keyword
for (i = 0; i < keywords.length; i++) { 
    console.log("loading", keywords[i]);

    // get request
    request('https://www.amazon.com/s/?url=field-keywords=' + keywords[i],     
        function (error, response, html) {
            if (!error && response.statusCode == 200) {
                var $ = cheerio.load(html); 
                console.log(keywords[i]);
                console.log(html);
            }
        }
    );
}
//加载模块
var请求=要求(“请求”);
var cheerio=需要('cheerio');
//拆分为数组
关键词=[“书”、“包”、“鞋”];
//循环每个关键字的任务
对于(i=0;i
为什么您尝试使用for循环在同一时间发出所有请求,可能是Amazon对每秒请求的次数有限制,请尝试按间隔逐个请求。那么我还应该使用什么?到目前为止,如果我只需要1000个关键词就可以了。我认为亚马逊不允许这样做。如果我被阻止了,我会这么做。同时,你能帮我完成我的实际要求吗?但也许你可以在请求关键字1成功后,一个接一个地请求,等待x秒,然后请求关键字2。但如果有限制,这不应该起作用。