美文网首页
Node.js爬虫抓取猫眼电影排行榜

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

作者: marching_4cc8 | 来源:发表于2018-07-09 21:18 被阅读0次

    原本是打算要抓取豆瓣的电影排行榜的,在测试过程中,由于没有设置访问时间间隔,造成了短时间大量访问豆瓣,被暂时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爬虫抓取猫眼电影排行榜

          本文链接:https://www.haomeiwen.com/subject/yrzgsftx.html