老板,今年有哪些大众好电影?(nodejs豆瓣电影爬虫)

  • 前言
  • 目标页面分析
  • 设计思路
  • 效果演示
  • GitHub 和源码

前言

现在看电影通常都会看豆瓣评分,虽然豆瓣本身有筛选功能,但是缺乏了一个重要元素:评分人数

想看好电影,通常是按评分排序,这时候会有好几十个评分9+的电影,但是点击查看发现评分人数寥寥无几,这些就缺乏参考价值了,通常只是少数人的狂欢,意义不大。所以必须综合考虑,加上评分人数,最少上w吧。

现在我们用nodejs做爬虫,查找评分8+,评论人数10000+的大众好电影!

目标页面分析

先看要爬的页面:https://movie.douban.com/tag/#/
分页是ajax分页的,查看通过chrome的XHR能看到ajax的地址:
https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=&start=0&year_range=2018,2018
分页是通过start参数控制的,通过分页能获取所有符合范围的数据,但是评分人数是需要进入到具体页面获取的。

设计思路

1、前台输入参数范围(评分、人数、年份)
2、后台通过nodejs的 http.get() 来获取所有分页的电影,然后进入各个电影页面获取评分人数
3、通过评分人数再筛选电影,把最终符合的电影写到集合里面
4、后台把集合传给前台,前台显示出来

效果演示

1、前台查询:

2、后台处理过程:

。。。。。。

3、前台最终结果:

这就是2018年评分8+,评分人数大于10000人的大众好电影了!

GitHub 和源码

–>GitHub地址

下载后先执行 npm i 安装模块,然后执行 node app.js

nodejs源码:

var cheerio = require('cheerio');
var http = require('https');
const opn = require('opn'); //打开浏览器模块var express             = require('express');
var app                 = express();
var bodyParse           = require('body-parser')
app.use(bodyParse.urlencoded({extended:false})) ;// 监听3000端口
var server=app.listen(3000) ;
opn('http://127.0.0.1:3000');/* 筛选配置:筛选最低8分,且评分人数不低于10000人的电影 */
var year=2018;    //年份
var minRange = 9;   //最低分
var maxRange = 10;   //最高分
var peoples = 10000; //最低评分人数//全局变量
var pageSize = 20;
var curPage = 0;
var moviesJson =[];
var moviesCount =0;
var resultMoviesJson=[];
var res0;// 处理根目录的get请求
app.get('/',function(req,res){res.sendfile('main.html') ;console.log('服务器等待请求中...\n');
}) ;// 处理/login请求
app.post('/action',function(req,res){//获取登录名称和密码year=parseInt(req.body.year);minRange=parseInt(req.body.minRange);maxRange=parseInt(req.body.maxRange);peoples= parseInt(req.body.peoples);curPage = 0;moviesJson =[];moviesCount =0;resultMoviesJson=[];res0 = res;//程序开始getMovies();
});//获取符合评分的所有电影
function getMovies(){var start = pageSize*curPage;var url = 'https://movie.douban.com/j/new_search_subjects?sort=S&range='+minRange+','+maxRange+'&tags=%E7%94%B5%E5%BD%B1&start='+start+'&year_range='+year+','+year+'';console.log("正在获取前"+(curPage+1)+"页数据...");http.get(url, function(sres) {var chunks = [];sres.on('data', function(chunk) {chunks.push(chunk); // chunks里面存储着网页的 Buffer 内容});//获取结束sres.on('end', function() {var data = Buffer.concat(chunks);var dataString = data.toString();var dataJson = JSON.parse(dataString);console.log("第"+(curPage+1)+"页共"+dataJson.data.length +"条数据\n");//如果有数据则继续获取下一页if( dataJson.data.length>0 ){moviesCount = moviesCount+dataJson.data.length;dataJson.data.forEach(e => {moviesJson.push(e)});//继续获取下一页setTimeout(function(){curPage++;getMovies();},3000*(curPage));}else{console.log("共"+moviesCount+"条数据\n");console.log("进入各个电影页获取评分人数再进行筛选...\n");for (let i = 1; i <= moviesJson.length; i++) {setTimeout(function(){filterMovies(moviesJson[i-1],i);},500*i);}}});});
}//根据评分人数筛选电影
function filterMovies(e,i){http.get(e.url, function(sres) {var chunks = [];sres.on('data', function(chunk) {chunks.push(chunk); // chunks里面存储着网页的 Buffer 内容});//获取结束sres.on('end', function() {var data = Buffer.concat(chunks);var dataString = data.toString();var $ = cheerio.load(dataString); //cheerio模块开始处理 DOM处理var peo = $(".rating_people span").text();var isOk = "不符合";if(peo>peoples){e.peoples=peo;resultMoviesJson.push(e);isOk="符合";}console.log("("+i+"/"+moviesCount+")"+e.title+":评分"+e.rate+",人数"+peo+"-->"+isOk);if(i>=moviesCount){console.log("\n共"+resultMoviesJson.length+"部符合要求\n");if(resultMoviesJson.length>0){resultMoviesJson.forEach(e => {console.log(e.title+":评分"+e.rate+",人数"+e.peoples);});console.log("--------------------------------------------");//向前台反馈信息res0.status(200).send(resultMoviesJson);}}});});
}

老板,今年有哪些大众好电影?(nodejs豆瓣电影爬虫)相关推荐

  1. 使用Java语言开发在线电影推荐网 电影推荐系统 豆瓣电影爬虫 基于用户、物品的协同过滤推荐算法实现 SSM(Spring+SpringMVC+Mybatis)开发框架 机器学习、人工智能、大数据开发

    使用Java语言开发在线电影推荐网 电影推荐系统 豆瓣电影爬虫 基于用户.物品的协同过滤推荐算法实现 SSM(Spring+SpringMVC+Mybatis)开发框架 机器学习.人工智能.大数据开发 ...

  2. 使用Java+SSM框架+JSP开发简单在线电影推荐网 电影推荐系统 豆瓣电影爬虫 基于用户、物品的协同过滤推荐算法 大数据 机器学习 SimpleMovieRecommendOnline

    使用Java+SSM框架+JSP开发简单在线电影推荐网 电影推荐系统 豆瓣电影爬虫 基于用户.物品的协同过滤推荐算法 大数据 机器学习 SimpleMovieRecommendOnline 一.项目简 ...

  3. python爬虫豆瓣电影按电影类型,豆瓣电影---按分类爬取

    全部代码以及分析见GitHub:https://github.com/dta0502/douban-movie 我突然想看下有什么电影可以看.由于我偏爱剧情类电影,因此我用Python爬虫来爬取剧情类 ...

  4. python 豆瓣电影top250_豆瓣电影top250爬虫系列(三)--- python+Echarts数据可视化

    前两篇我们分别爬取了电影数据,也将爬取到的数据存到了数据库: 接下来我们要对现有的数据进行分析,已获得一些有效信息: 我这里只是进行了简单的可视化分析,运用Echarts插件生成各种图标: pytho ...

  5. 淘宝电影“追杀”猫眼电影,同门相争不可避免

    在娱乐影评圈中,<小时代4>与<栀子花开>之间的自捧互黑拼杀已经接近尾声,而在互联网O2O圈内,二者的较量才刚刚开始.不过,互联网人关注的不是这两部影片的内容对比,而是影片票房 ...

  6. 不会 Python 没关系,手把手教你用 web scraper 抓取豆瓣电影 top 250 和 b 站排行榜

    苏生不惑第190 篇原创文章,将本公众号设为 星标 ,第一时间看最新文章. 关于Python之前分享过很多文章了: Python 抓取知乎电影话题下万千网友推荐的电影,这个国庆节不愁没电影看了 王菲k ...

  7. python大规模获取豆瓣影评_python爬取豆瓣电影排行榜(requests)

    ''' 爬取豆瓣电影排行榜 设计思路: 1.先获取电影类型的名字以及特有的编号 2.将编号向ajax发送get请求获取想要的数据 3.将数据存放进excel表格中 ''' 环境部署: 软件安装: 模块 ...

  8. 案例:爬取豆瓣电影Top250中的电影信息

    案例:爬取豆瓣电影Top250中的电影信息 豆瓣电影Top250首页 分析请求地址 在豆瓣电影Top250首页的底部可以确定电影信息一共有10页内容,每页25个电影信息,如下图: 切换页面,可以看到浏 ...

  9. 豆瓣电影多个作品里的海报、剧照图片怎样快速复制保存

    大家都越来越喜欢在豆瓣上观看电影,豆瓣电影上每个作品里都会有好看的剧照,海报图,大家想要保存时,不知如何快速保存多个作品中里的图片,下面给大家安利一个小技巧,下面一起来看看吧. 打开豆瓣电影,搜索喜欢 ...

最新文章

  1. c++list支持索引吗_还在为不懂Python切片操作及原理而苦恼吗?漫画帮你立马理解掌握...
  2. java加载c库阻塞_【死磕Java並發】-----J.U.C之阻塞隊列:DelayQueue
  3. 测试 Zoundry Raven
  4. 海外观察丨未来 10 大科技趋势预测全解读(上)
  5. iOS获取缓存文件的大小并清除缓存
  6. 2016年 第07届 蓝桥杯 Java B组 决赛真题详解及小结
  7. linux下面调试C、C++
  8. aws lambda使用_如何使用AWS Lambda为发布/订阅消息选择最佳事件源
  9. elasticjob 分片策略
  10. ubuntu下载gmt_科学网—Linux/Ubuntu安装地学制图软件GMT6.0.0 - 杨家乐的博文
  11. 更新 箫心病毒分析专家2006 build 5.23(C#2.0)
  12. 公司行政的未来在哪里?要不要转行?
  13. Jmeter性能测试之如何写Java请求测试用例类
  14. python 输入整数_python输入整数
  15. 虚拟机中Ubuntu安装中文输入法(谷歌输入法)
  16. 小孩子要学习时间管理吗
  17. 学校计算机比赛策划,学校计算机技能比赛活动策划方案
  18. web前端html实例-Html5实现的语音搜索功能
  19. pt100+51单片机的温控系统程序+仿真图 还带压力显示的
  20. 职场宝典:让你平步青云的10个谈话技巧[转载]

热门文章

  1. 后台数据转树形结构返回前台
  2. 程序员麦兜【编程笔记】-看了一点面试题
  3. Keepalived 高可用集群的使用
  4. python中randint_python中的randint,引入模块
  5. 第一次跳槽,转战北京
  6. css文本内容过长时就自动换行
  7. jQuery读书笔记二 jQuery中的事件与应用
  8. Android 手把手带你玩转自定义相机
  9. c语言温度检测查表,ntc 测温 单片机 C语言 查表 表格 温度系数表 计算公式
  10. Excel技能之8种查找,乍看感觉有点懵