猫眼电影MySQL数据库怎么写_MySQL简要分析猫眼电影TOP100榜-程序员宅基地

技术标签: 猫眼电影MySQL数据库怎么写  

作者:国服帅座 经济学在读硕士

公众号:统计之家

提出问题

对于广大电影爱好者来说,猫眼平台提供了海量电影信息。在其官网上有一个TOP100榜单,我们使用SQL语句简单分析该榜单电影,试图了解如下这些信息。

评分最高的电影

评分最低的电影

上映时间最早的电影

周星驰主演的电影

按年份统计上映电影数量

分别统计喜剧片和恐怖片的数量

观影时间超过180分钟的电影

获得数据

本文数据由笔者利用selenium爬取,爬虫代码附在文末。

在爬虫前先在MySQL中创建名为“maoyan”的数据库,然后创建名为“top100”的数据表,然后在爬虫时将每条记录导入该表。

表中共有6个字段,100条记录。

title:电影名称

minute:电影时长,单位“分钟”

score:电影在猫眼网站上的评分

stage:电影上映的年代

style:电影所属类型,并不单一

actor:电影主演,基本都是三位演员名字

分析数据

1.评分最高的电影

SELECT * FROM top100

WHERE score = (SELECT MAX(score) FROM top100);

分析:周星驰的《大话西游之月光宝盒》确实能打,全榜最高的9.6分!

2.评分最低的电影

SELECT * FROM top100

WHERE score = (SELECT MIN(score) FROM top100);

分析:榜单最低分为8.8分,共有21部电影。

3.上映时间最早的电影

SELECT * FROM top100

WHERE SUBSTR(stage,1,4) =

(SELECT MIN(SUBSTR(stage,1,4)) FROM top100);

分析:一代女神费雯丽主演的《乱世佳人》,上映年代为1939年。

4.周星驰主演的电影

SELECT * FROM top100

WHERE actor LIKE '%周星驰%';

分析:星爷主演的电影共有4部出现在榜单,满满的青春呀!

5.按年统计上映电影数量

SELECT SUBSTR(stage,1,4) AS year, COUNT(*) AS number

FROM top100

GROUP BY SUBSTR(stage,1,4)

HAVING COUNT(*) > 4

ORDER BY number DESC;

-- 只选取了上映电影达到5部以上的年份

6.分别统计“喜剧片”和“恐怖片”的数量

SELECT '喜剧片' AS "类型", COUNT(style) AS "数量"

FROM top100

WHERE style LIKE '%喜剧%'

UNION

SELECT '恐怖片' AS "类型", COUNT(style) AS "数量"

FROM top100

WHERE style LIKE '%恐怖%';

分析:喜剧片共18部,而恐怖片仅仅1部。

7.观影时间超过180分钟的电影

SELECT * FROM top100

WHERE minute > 180;

分析:观影时间最长为《乱世佳人》,几乎4小时!

爬虫代码

from selenium import webdriver

import time

import re

import pymysql

driver = webdriver.Chrome()

url_list = ["https://maoyan.com/board/4?offset={}".format(i) for i in range(0,91,10)]

conn = pymysql.connect(host='localhost',port=3307,user='root',password='usbw',db='maoyan',charset='utf8')

cursor = conn.cursor() # 提前在MySQL创建数据库maoyan,创建表格top100

for url in url_list:

driver.get(url)

for i in range(1,11):

title = driver.find_element_by_css_selector('#app > div > div > div.main > dl > dd:nth-child('+str(i)+') > div > div > div.movie-item-info > p.name > a').text

actor = driver.find_element_by_css_selector('#app > div > div > div.main > dl > dd:nth-child('+str(i)+') > div > div > div.movie-item-info > p.star').text.lstrip('主演:')

zs = driver.find_element_by_css_selector('#app > div > div > div.main > dl > dd:nth-child('+str(i)+') > div > div > div.movie-item-number.score-num > p > i.integer').text

xs = driver.find_element_by_css_selector('#app > div > div > div.main > dl > dd:nth-child('+str(i)+') > div > div > div.movie-item-number.score-num > p > i.fraction').text

score = zs + xs # 评分的整数和小数部分分别获取后拼接

stage = driver.find_element_by_css_selector('#app > div > div > div.main > dl > dd:nth-child('+str(i)+') > div > div > div.movie-item-info > p.releasetime').text.lstrip('上映时间:')

driver.find_element_by_css_selector('#app > div > div > div.main > dl > dd:nth-child('+str(i)+') > div > div > div.movie-item-info > p.name > a').click()

time.sleep(1)

style = driver.find_element_by_css_selector('body > div.banner > div > div.celeInfo-right.clearfix > div.movie-brief-container > ul > li:nth-child(1)').text

length = driver.find_element_by_css_selector('body > div.banner > div > div.celeInfo-right.clearfix > div.movie-brief-container > ul > li:nth-child(2)').text

m = re.search('(.*)/(.*)', length) # 正则表达式,只要电影时长

minute = m.group(2).rstrip('分钟')

cursor.execute("INSERT INTO top100 VALUES('{0}','{1}','{2}','{3}','{4}','{5}');".format(title,minute,score,stage,style,actor))

conn.commit() # 提交插入至数据库

driver.back() # 返回上级页面

time.sleep(1)

cursor.close()

conn.close()

往期精彩传送

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30095869/article/details/114022345

智能推荐

springboot整合微信支付笔记_cn.springboot.bestpay-程序员宅基地

文章浏览阅读1.1k次。先来看一下微信支付的流程,可见在整个支付流程中后台需要处理的事情有:1、调用统一下单api2、生成JSAPI页面调用的支付参数,并请求支付3、异步通知商户支付结果4、返回微信异步通知的处理结果下面来实际编程实现以上的过程,这里面我们使用了第三方Sdk,best-pay-sdkhttps://github.com/Pay-Group/best-pay-sdkmaven引入依赖 ..._cn.springboot.bestpay

【Linux】进程_linux so 入口函数-程序员宅基地

文章浏览阅读527次。首先通过图右边的文件编译过程,生成 so 文件和可执行文件,放在硬盘上。下图左边的用户态的进程 A 执行 fork,创建进程 B,在进程 B 的处理逻辑中,执行 exec 系列系统调用。这个系统调用会通过 load_elf_binary 方法,将刚才生成的可执行文件,加载到进程 B 的内存中执行。_linux so 入口函数

大屏可视化之适配和布局_大屏还原ui适配宽度-程序员宅基地

文章浏览阅读5k次,点赞5次,收藏53次。前言在做可视化大屏的时候,我们首先要保证UI图的比例不变,例如16:9的UI图,但大屏的比例可能是2:1,很多时候大屏的比例往往很少能与UI图的比例一模一样的,这个时候我们就要利用公式换算来适配大屏。例如16:9的UI图:适配大屏当页面首次加载时,判断视口的宽高,如果视口的宽/高 > 16/9 则说明视口宽度比较设计图宽,实际的显示宽度应该等于视口的高度*16/9。如果视口的宽/高 < 16/9 则说明视口高度比设计图高,实际的显示宽度应该等于视口的宽度,显示高度应等_大屏还原ui适配宽度

centos7挖矿病毒(xmrig,javs)清理_xmrig miner怎么彻底清除-程序员宅基地

文章浏览阅读3.3k次。1. 查看计划任务ls /var/spool/cron删除异常任务其配置项。如果当前系统之前并未配置过计划任务,可以直接删除计划脚本目录即可:rm -rf /var/spool/cron/*2. 查看密钥认证文件删除木马创建的密钥认证文件,如果当前系统之前并未配置过密钥认证,可以直接清空认证存放目录:rm -rf /root/.ssh/*如果有配置过密钥认证,需要删除指定的黑客创建的认证文件即可。3. 修复 SSH 配置项一般默认脚本中进行修改的 PermitRootLogin、R._xmrig miner怎么彻底清除

产品经理如何与研发工程师相处?-- Julie Zhuo_研发是把想法变成现实的桥梁-程序员宅基地

文章浏览阅读358次。原作者:Julie Zhuo,前Facebook产品设计副总裁原文地址:https://medium.com/the-year-of-the-looking-glass/how-to-work-with-engineers-a3163ff1eced很久以前,我当过项目经理。之后,我成为了工程师。最近7年,我担任产品设计师。每天我都与这三个岗位的人一起工作。每天,我都能发现新的方式来理解这产品研发背后的三大支柱的职责、挑战和艺术。研发工程师是魔术师,他们只需要轻轻动几下手指调整像素,瞧,一个能运作的产_研发是把想法变成现实的桥梁

随便推点

基于C#的波形显示控件的实现_kaic_c# 波形图控件-程序员宅基地

文章浏览阅读410次。开发完成后的波形显示控件,可以快速嵌入到.NET平台下的软件工程中,开发者只需简单的操作,就可以使用该控件友好地显示波形数据,从而达到快速开发的目的。本文先介绍了.NET平台下用户控件开发的基本方法,以及用C#描述的GDI+图形开发技术,然后提出一种基于C#的波形显示控件的设计思路,并对波形坐标值转换、坐标标尺、工具栏、局部放大等具体的设计细节进行详细解析。该波形显示控件能够根据当前要显示的波形数据的值,自动选择最佳的坐标范围,来直观地在控件的波形显示区域显示完整的波形曲线。关键词:波形显示控件;_c# 波形图控件

c语言考试程序改错只要结果对吗,计算机等级考试二级C语言程序设计第17章上机指导.ppt...-程序员宅基地

文章浏览阅读338次。计算机等级考试二级C语言程序设计第17章上机指导第17章 上机指导 17.1 上机考试简介   上机考试包括三个部分:程序填空题、程序改错题和程序设计题。填空和改错部分如果有指定的结果输出文件时,只要运行结果正确即可得满分,如果运行结果有错误或无结果文件输出时,则上机考试系统将对其修改或填充部分进行检测,如果其内容全部正确,则也可以得满分,如果部分正确,则按比例进行给分。而程序编制、调试运行类..._计算机二级c语言改错如果运行结果正确

java netty html,Netty框架的理解和简单使用-程序员宅基地

文章浏览阅读93次。Netty是什么Netty是一个高性能的异步的,基于事件驱动的NIO框架,它是JBOSS提供的一个开源框架,用以快速开发高性能,高可靠性的网络服务器和客户端程序。netty的架构 Netty官网https://netty.io/index.html 这里可以找到jar包或者maven依赖类似框架Apache 的 Minajava和nettyJava使用netty,建议jdk版本为1.5以后的,这是..._netty-codec-4.1.33.final.jar作用

Dubbo框架、用户注册、单点登录系统、用户登出、购物车系统、设置拦截器,实现用户权限校验、ThreadLocal、订单系统模块_dubbo登录登出-程序员宅基地

文章浏览阅读1.2k次。1、Dubbo框架2、重构京淘项目:JT-WEB/JT-SSO3、用户注册4、单点登录系统5、用户登出/完成用户数据6、封装cookie工具7、实现商品信息远程调用8、购物模块:jt-cart,CRUD操作_dubbo登录登出

php跨域问题怎么解决办法,跨域问题的解决方案 php-程序员宅基地

文章浏览阅读107次。本文通过设置Access-Control-Allow-Origin来实现跨域。例如:客户端的域名是client.runoob.com,而请求的域名是server.runoob.com。如果直接使用ajax访问,会有以下错误:1 XMLHttpRequest cannot load http://server.runoob.com/server.php. No ‘Access-Control-All..._php火狐跨域问题

《C语言程序设计》第五版谭浩强课后答案 第九章《用户自己建立数据类型​》习题答案 (大一大二、考研、计算机二级必看)_c程序设计第五版谭浩强课后答案第九章-程序员宅基地

文章浏览阅读3k次,点赞7次,收藏29次。第九章《用户自己建立数据类型​》习题答案 1.定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。2.写一个函数days,实现第1 题的计算。由主函数将年、月、日传递给days函数,计算后将日子数传回主函数输出。3.编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个记录包括num,name,score[3],用主函数输人这些记录,用print函数输出这些记录。4.在第3题的基础上,编写一个函数input,用来输人5个学生的数据记录。5.有10个学生,_c程序设计第五版谭浩强课后答案第九章