Javascript 网络爬虫-返回下一个函数中使用的数组

Javascript 网络爬虫-返回下一个函数中使用的数组,javascript,jquery,node.js,request,cheerio,Javascript,Jquery,Node.js,Request,Cheerio,我可以确认的第一个功能工作正常 我想向变量AtozLink返回一个数组,以便在后面的函数中使用它。我将向数组中的每个url发出请求,并从这些链接中提取更多信息 非常感谢,我已经作为一个项目做了几天了,我是jQuery、Web爬行、JS、NodeJS和expressJS的初学者。为了工作而陷入困境 var express = require('express'); var request = require('request'); var cheerio = require

我可以确认的第一个功能工作正常

我想向变量AtozLink返回一个数组,以便在后面的函数中使用它。我将向数组中的每个url发出请求,并从这些链接中提取更多信息

非常感谢,我已经作为一个项目做了几天了,我是jQuery、Web爬行、JS、NodeJS和expressJS的初学者。为了工作而陷入困境

    var express = require('express');
    var request = require('request');
    var cheerio = require('cheerio');
    var router = express.Router();

    var fullUrl;
    fullUrl = [];

    var AtoZLinks = function(){
        var url = 'http://example1.com';
        request(url, function(error, response, html) {
            if (!error && response.statusCode === 200) {
                var $ = cheerio.load(html);
                var fullUrl = [];
                var places = "Places";
                $('.clear a').each(function() {
                    var link = $(this);
                    link.each(function(index) {
                        var href = link.attr('href');
                        if (href.match(places)) {
                            // The urls from fullUrl here to be returned to parent variable.
                            fullUrl[index] = url + href; // Think something is wrong here... I've also tried "fullUrl.push(url + href);"
                            console.log(fullUrl); // This prints out all urls correctly

                        }
                    });
                });
                for (var i = 0; i < fullUrl.length; i++) {
                    console.log(fullUrl[i];
                } // This code only prints out the last url stored (So I'm thinking the urls are being stored incorrectly...)
            }
        });
    };

    /* GET crawler page. */
    router.get('/crawler', function(req, res, next) {
      AtoZLinks();
      next();
    }, function(req, res) {

    });

    module.exports = router;

    // Feel free to ignore the following work I've done or..
    // Your support with the the following function will be a bonus!
    // I need to use the links in the previous array variable in the following
    // function to extract further urls within those urls that I will work with.

    var url = AtoZLinks;

    request(AtoZLinks, function(error, response, html) {
        if (!error && response.statusCode === 200) {

            var $ = cheerio.load(html);
            // This selector is the code needed to extract the links from within the
            // links in the AtoZLinks array.
            $('div.fclist-section.clear.list-four').each(function() {
                $(this).find('a').each(function() {
                    var link = $(this);
                    var href = link.attr('href');
                    fullUrl = url + href;
                    console.log(fullUrl);
                });
            });

        }
    );
var express=require('express');
var请求=要求(“请求”);
var cheerio=需要('cheerio');
var router=express.router();
var-fullUrl;
fullUrl=[];
var AtoZLinks=函数(){
var url='1〕http://example1.com';
请求(url、函数(错误、响应、html){
如果(!error&&response.statusCode==200){
var$=cheerio.load(html);
var fullUrl=[];
var places=“places”;
$('.clear a')。每个(函数(){
var-link=$(这个);
链接。每个(功能(索引){
var href=link.attr('href');
如果(href.match(位置)){
//此处fullUrl中的URL将返回到父变量。
fullUrl[index]=url+href;//我认为这里有问题……我还尝试了“fullUrl.push(url+href);”
console.log(fullUrl);//这将正确打印出所有URL
}
});
});
for(var i=0;i
你的意思是这样的吗

var arrURLs;

arrURLs = [
    'www.ask.com',
    'www.google.com',
    'www.bing.com',
    'www.yahoo.com'
];

AtoZLinks(arrURLs);

  var AtoZLinks = function(theURLs){
      for (var i = 0; i < theURLs.length; i++) {
          var url = theURLs[i];
          request(url, function(error, response, html) {
              if (!error && response.statusCode === 200) {
                  var $ = cheerio.load(html);
                  var fullUrl = [];
                  var places = "Places";
                  $('.clear a').each(function() {
                      var link = $(this);
                      link.each(function(index) {
                          var href = link.attr('href');

                          //absolute match
                          if (href === url) {
                            //true
                          } else {
                            //false
                          }

                          //href contains url
                          if (href.indexOf(url) > -1) {
                            //true
                          } else {
                            //false
                          }                              

                          if (href.match(places)) {
                              // The urls from fullUrl here to be returned to parent variable.
                              fullUrl.push(url + href);
                              console.log(JSON.stringify(fullUrl));

                          }
                      });
                  });
              }
          });
      }
  };
var;
arrURL=[
“www.ask.com”,
“www.google.com”,
“www.bing.com”,
“www.yahoo.com”
];
AtozLink(arrURL);
var AtoZLinks=函数(URL){
for(var i=0;i-1){
//真的
}否则{
//假的
}                              
如果(href.match(位置)){
//此处fullUrl中的URL将返回到父变量。
fullUrl.push(url+href);
log(JSON.stringify(fullUrl));
}
});
});
}
});
}
};

Javascript是一种异步语言,这意味着当你要求它做某件事时,它会在一个并行执行的待办事项列表中对该进程进行排队,以便继续解析文档。一种解决方法是建立一个回调链,当请求完成时,它会调用一些作为参数传递的函数。我相信你已经回答了我问了一个额外的问题:“如何在下一个函数中使用链接数组”。我现在将尝试实现它。非常感谢:)嗨,WhiteHat,不幸的是,我仍在挣扎。首先,我需要先检查完整URL数组是否返回了正确的值…谢谢。我在向自己证明数组包含我存储的URL时遇到了问题…我希望这张图片是有用的…刚刚开始工作,不幸的是,它们阻止了大量内容,包括postmg and JSFIDLE,所以我无法访问链接。你能用附加代码编辑你的问题吗?我对我的答案做了一个小编辑,但不确定你有什么问题…啊,好的,我添加了一些注释…在第一个函数中,我基本上需要返回到名为“fullUrl”的数组的链接。该链接将是当前url+href链接。我认为它工作不正常。