美文网首页码农的世界
百度糯米电影信息采集爬虫开发教程

百度糯米电影信息采集爬虫开发教程

作者: 98405539a93c | 来源:发表于2018-01-23 14:08 被阅读28次

本文主要介绍“百度糯米电影信息采集爬虫”的开发教程,按三个不同类目爬取影片的基本信息,爬取字段包括电影ID、电影名称和上映时间等字段,文章结尾会附上完整的爬虫代码。

采集网站URLhttps://dianying.nuomi.com/movie/movielist

使用功能点

· 自定义设置

· initCrawlafterDownloadPageonProcessContentPageafterExtractPage回调函数

接下来,给你详细说明“百度糯米电影信息采集爬虫”的开发过程

步骤1 创建爬虫

注册并登录神箭手,进入神箭手控制台。

点击“新建应用”,选择“爬虫”,点击“下一步”。

输入爬虫名称“百度糯米电影信息采集爬虫”,选择“编辑模式”,点击“创建”,神箭手爬虫创建成功。

步骤2 分析网页&开发爬虫

本文使用Chrome浏览器分析京东商品网页,按“F12”打开浏览器“开发者工具”。

在浏览器“开发者工具”中勾选“Preserve log”,按“F5”刷新网页,电影列表数据便会重新加载进来。

在浏览器“开发者工具”中选择“AHR”,搜索“getmovielist”,便可找到存放电影列表信息的URL。

分析请求该URL返回的JSONP数据,结合“神箭手开发文档”,在神箭手爬虫编辑页开发爬虫代码。

步骤3 测试并运行爬虫

爬虫开发完成后,点击“测试”按钮看爬虫的爬取结果是否正确。

测试通过后,进入“爬虫设置”页,设置“代理IP”、“文件云托管”以及需要爬取的电影“分类”。

返回爬虫总览页,点击“启动爬虫”,稍等片刻,爬虫就会爬取到数据了。

步骤4 数据发布与导出

爬虫爬到数据后,可以选择将数据发布到网站或数据库中,点此查看神箭手数据发布详细教程。

此外,还可选择将数据“导出”,点此查看神箭手数据导出详细教程。

神箭手爬虫导出数据示例,如下图所示:

“百度糯米电影信息采集爬虫”完整示例代码

/**

    百度糯米电影信息采集爬虫源码

    可批量爬取“热映影片”、“即将上映”和“影片库”的所有电影数据

    只爬取列表页上展示出的数据

    可使用代理IP,也可不使用代理IP

    想爬取更多数据,请参考“新版”神箭手开发文档(http://docs.shenjian.io/develop/crawler/quick-start.html)

**/

var category = "热映影片";//@select(category, 请选择要爬取的电影分类, 一次只能选一个分类进行爬取)

var uiconfigs = {

    inputs: [

        {

            name: "category",

            onLoad: function() {

                this.addOption(["热映影片", "即将上映", "影片库"]);

            }

        }

    ]

};

ui.render(uiconfigs);

var configs = {

    domains: ["dianying.nuomi.com"],

    contentUrlRegexes: [

        /http[\w:\/]+dianying\.nuomi\.com\/movie\/getmovielist\?.*/

    ],

    helperUrlRegexes: [""],

    fields: [

        {

            name: "movie_list",

            alias: "电影列表",

            selector: "//*[contains(@class,'movie-content')]",

            repeated: true,

            children:[

                {

                    name: "id",

                    alias: "电影ID",

                    selectorType: SelectorType.Regex,

                    selector: /"movieId":(\d+)\}/,

                    required: true,

                    primaryKey: true

                },

                {

                    name: "category",

                    alias: "分类",

                    required: true,

                    primaryKey: true

                },

                {

                    name: "name",

                    alias: "电影名称",

                    selector: "//*[contains(@class,'movie-name')]/text()"

                },

                {

                    name: "image",

                    alias: "封面图",

                    selector: "//*[contains(@class,'movie-pic')]//@src"

                },

                {

                    name: "score",

                    alias: "评分",

                    selector: "//*[contains(@class,'num nuomi-red')]"

                },

                {

                    name: "projection_type",

                    alias: "放映类型",

                    selector: "//*[contains(@class,'movie-name')]/span"

                },

                {

                    name: "film_desc",

                    alias: "电影短评",

                    selector: "//*[contains(@class,'font-shadow font')]"

                },

                {

                    name: "movie_infos",

                    selector: "//ul[contains(@class,'info')]/li",

                    repeated: true,

                    transient: true

                },

                {

                    name: "type",

                    alias: "类型"

                },

                {

                    name: "duration",

                    alias: "时长"

                },

                {

                    name: "release_time",

                    alias: "上映时间"

                }

            ]

        }

    ]

};

configs.initCrawl = function(site) {

    var scanUrl = "";

    var time = new Date().getTime();

    if (category == "热映影片") {

        scanUrl = "https://dianying.nuomi.com/movie/getmovielist?pagelets[]=pageletMovielist&reqID=0&type=hot&cityId=131&pageNum=0&pageSize=10&needMovieNews=false&isHomePage=false&needSliceAdSpace=false&t=" + time;

    }

    else if (category == "即将上映") {

        scanUrl = "https://dianying.nuomi.com/movie/getmovielist?pagelets[]=pageletMovielist&reqID=0&type=new&cityId=131&pageNum=0&pageSize=10&needMovieNews=false&t=" + time;

    }

    else if (category == "影片库") {

        scanUrl = "https://dianying.nuomi.com/movie/getmovielist?pagelets[]=pageletMovielist&reqID=0&type=lib&cityId=131&pageNum=0&pageSize=10&needMovieNews=false&t=" + time;

    }

    else {

        system.exit("请选择要爬取的电影分类!");

    }

    site.addScanUrl(scanUrl);

};

configs.afterDownloadPage = function(page, site) {

    if (!page.raw) return page;

    var pageRaw = page.raw;

    try {

        pageRaw = page.raw.substring(page.raw.indexOf("(")+1, page.raw.lastIndexOf(")"));

        var jsonData = JSON.parse(pageRaw);

        pageRaw = jsonData.html;

    }

    catch (err) {

        console.log("Failed to get movie list! err: " + err);

    }

    page.raw = pageRaw;

    return page;

};

configs.onProcessScanPage = function(page, content, site) {

    return false;

};

configs.onProcessContentPage = function(page, content, site) {

    var m = /&pageNum=(\d+)/.exec(page.url);

    if (!m && !m[1]) return false;

    var curPageNum = parseInt(m[1]) + 1;

    var totalPageNum = parseInt(extract(page.raw, "//*[@id='pagerInfo']/@data-pagecount"));

    if (curPageNum >= totalPageNum) return false;

    var time = new Date().getTime();

    var nextContentUrl = page.url.substring(0, page.url.indexOf("&t="));

    nextContentUrl = nextContentUrl.replace(m[0], "&pageNum="+curPageNum) + "&t=" + time;

    site.addUrl(nextContentUrl);

    return false;

};

configs.afterExtractPage = function(page, data, site) {

    var movieList = data.movie_list;

    if (movieList && movieList.length > 0) {

        for (var ml in movieList) {

            movieList[ml].category = category;

            var movieInfos = movieList[ml].movie_infos;

            for (var mi in movieInfos) {

                if (movieInfos[mi].indexOf("类型") > -1) {

                    movieList[ml].type = movieInfos[mi].replace(/\u7c7b\u578b[::]+/, "");

                }

                else if (movieInfos[mi].indexOf("时长") > -1) {

                    movieList[ml].duration = movieInfos[mi].replace(/\u65f6\u957f[::]+/, "");

                }

                else if (movieInfos[mi].indexOf("上映时间") > -1) {

                    movieList[ml].release_time = movieInfos[mi].replace(/\u4e0a\u6620\u65f6\u95f4[::]+/, "");

                }

            }

        }

        data.movie_list = movieList;

    }

    return data;

};

var crawler = new Crawler(configs);

crawler.start();

相关文章

网友评论

    本文标题:百度糯米电影信息采集爬虫开发教程

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