0

我正在分析来自 Alexa 类别的数据,例如这个

我的代码可以在这里找到。

我正在获取网站的 URL 列表,然后尝试获取每个网站的排名。问题是我得到了一个很好的网站列表(数组)和一个混乱的排名列表(也是一个数组,但超出了预期的顺序)。到目前为止,我的线索是节点阻塞功能有问题(我使用 async.series 一次运行一个函数,但它不起作用)并且 for 循环肯定有问题。

我使用“节点”从命令行运行它。非常感谢任何建议/帮助!谢谢你。

4

1 回答 1

0

您的代码有两个问题:

  1. 范围的封闭问题i
  2. 排名插入不会逐渐发生(对我来说i是这样的4 0 2 1 3 5 7 6 12 11 9 13 8 15 16 18 21 19 17 22 23 20 14 24 10

要解决此问题,请更改您的第二个功能,如下所示:

...
function (callback) {
    for (i = 0; i < websites.length; i++) {
        clr(i);
    };
}], function (error) {
    if (error) {
        console.log(error);
    }
});

function clr(i){
    alexaurl = "http://www.alexa.com/siteinfo/" + websites[i];
    request(alexaurl, function (error, response, body) {
        $ = cheerio.load(body);
        $('.siteInfoPage #traffic-rank-content .metricsUrl a').each(function () {
            //ranks.push($(this).text());
            ranks[i]=$(this).text();
            return false; // so it does not count the a:hover element
        });
        console.log(i);
        console.log(websites);
        console.log(ranks);
        console.log("The website " + websites[i] + " has a rank of " + ranks[i]);
    });
}
于 2013-11-04T13:04:12.633 回答