使用Node js进行Web爬网

时间:2018-08-29 21:28:06

标签: node.js express web-scraping mean-stack cheerio

我正在抓盲medium.com。我正在尝试显示网站上存在的所有链接。

var url="https://medium.com/";

    request(url,function(error,response,html){

        if(!error && response.statusCode==200){

            var $=cheerio.load(html);

            var json={content:"",link:""};
            var jsonObjects=[];

            var links=$('a');
            //console.log(links);
            $(links).each(function(i,link){
                json.content=$(link).text();
                json.link=$(link).attr('href');
                jsonObjects.push(json);
            });


        }

        fs.writeFile('Links.json',JSON.stringify(jsonObjects,null,4),function(err){
            if(!err){
                res.send("File written successfully!!!!")
            }
        })

    })

当我使用此代码时,Links.json文件中仅再次显示一个链接。

  

[       {           “内容”:“关于”,           “链接”:“ https://about.medium.com”       },       {           “内容”:“关于”,           “链接”:“ https://about.medium.com”       },       {           “内容”:“关于”,           “链接”:“ https://about.medium.com”       },       {           “内容”:“关于”,           “链接”:“ https://about.medium.com”       },       {           “内容”:“关于”,           “链接”:“ https://about.medium.com”       },       {           “内容”:“关于”,           “链接”:“ https://about.medium.com”       },       {           “内容”:“关于”,           “链接”:“ https://about.medium.com”       },       {

我已经尝试了所有方法,但没有获得medium.com主页的链接 请帮忙。

1 个答案:

答案 0 :(得分:0)

这是因为您继续编辑同一对象并将其一次又一次地推入数组。

var json={content:"",link:""};

应该在each循环中。

var url="https://medium.com/";

    request(url,function(error,response,html){

        if(!error && response.statusCode==200){

            var $=cheerio.load(html);
            var jsonObjects=[];

            var links=$('a');
            //console.log(links);
            $(links).each(function(i,link){
                var content = $(link).text();
                var link = $(link).attr('href');
                jsonObjects.push({ content: content, link: link });
            });


        }

        fs.writeFile('Links.json',JSON.stringify(jsonObjects,null,4),function(err){
            if(!err){
                res.send("File written successfully!!!!")
            }
        })

    })