Node.js爬虫抓取猫眼电影排行榜

原本是打算要抓取豆瓣的电影排行榜的,在测试过程中,由于没有设置访问时间间隔,造成了短时间大量访问豆瓣,被暂时ip限制了,只能去抓取猫眼电影的排行榜了。

话不多说,直接上:

作为前端的小伙伴,大家在写东西的时候,经常需要用到数据,这时候直接从各大网站抓取我们需要的数据,用起来就比较方便了。

基本思路:

在node.js使用request获取页面内容。

通过cheerio中间件,就可以在node.js中,像jQuery一样去获取节点了。

把遍历好的数据返回json以供前台ajax获取使用,或者使用fs存入json文件。


下面直接上代码:

var express =require('express');

var router = express.Router();

var request =require("request");

var cheerio =require("cheerio");

var fs =require("fs");

var bugUrl ='http://maoyan.com/board/4?offset=';

router.get('/',async function (req, res, next) {

var data = [];

    var count =0;

    var result = [];

    var url ='';

    function requestUrl(count){

url = bugUrl +  count;

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

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

var $ = cheerio.load(body);

                var navText = $('.board-wrapper dd');

                if (navText.length >0&&count<100) {

Array.from(navText).forEach(function (value) {

var img =$(value).find(".image-link img.board-img").attr("data-src")

var title = $(value).find(".image-link img.board-img").attr("alt");

                        var url ="http://maoyan.com"+$(value).find(".board-item-main .name a").attr("href");

                        var rank = $(value).find(".board-index").text();

                        data.push({rank,title,img, url});

                    });

                    setTimeout(function () {

requestUrl(count +10);

                        console.log(count/10+"页")

},500)

}else {

writeJson(data);

                    res.json(data)

}

}else {

res.json(error);

            }

});

    }

function writeJson(params){

//现将json文件读出来

        fs.readFile('./data/data.json',function(err,data){

if(err){

return console.error(err);

            }

var str = JSON.stringify(Object.assign(params,JSON.parse(data.toString()))).toString();

            fs.writeFile('./data/data.json',str,function(err){

if(err){

console.error(err);

                }

console.log('----------新增成功-------------');

            })

})

}

requestUrl(0)

});

module.exports = router;

你可能感兴趣的:(Node.js爬虫抓取猫眼电影排行榜)