从Alexa解析排名

时间:2013-11-04 11:58:02

标签: javascript node.js html-parsing

我正在解析来自Alexa类别的数据,例如one

我的代码可以找到here

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

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

1 个答案:

答案 0 :(得分:0)

您的代码有两个问题:

  1. i
  2. 范围的关闭问题
  3. 排名不会逐渐增加(对我而言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
  4. 要修复此更改,您需要执行以下第二个功能:

    ...
    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]);
        });
    }