技术标签: 猫眼电影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()
往期精彩传送
文章浏览阅读1.1k次。先来看一下微信支付的流程,可见在整个支付流程中后台需要处理的事情有:1、调用统一下单api2、生成JSAPI页面调用的支付参数,并请求支付3、异步通知商户支付结果4、返回微信异步通知的处理结果下面来实际编程实现以上的过程,这里面我们使用了第三方Sdk,best-pay-sdkhttps://github.com/Pay-Group/best-pay-sdkmaven引入依赖 ..._cn.springboot.bestpay
文章浏览阅读317次。ESP8266开发环境搭建_安信可ide1.5
文章浏览阅读527次。首先通过图右边的文件编译过程,生成 so 文件和可执行文件,放在硬盘上。下图左边的用户态的进程 A 执行 fork,创建进程 B,在进程 B 的处理逻辑中,执行 exec 系列系统调用。这个系统调用会通过 load_elf_binary 方法,将刚才生成的可执行文件,加载到进程 B 的内存中执行。_linux so 入口函数
文章浏览阅读5k次,点赞5次,收藏53次。前言在做可视化大屏的时候,我们首先要保证UI图的比例不变,例如16:9的UI图,但大屏的比例可能是2:1,很多时候大屏的比例往往很少能与UI图的比例一模一样的,这个时候我们就要利用公式换算来适配大屏。例如16:9的UI图:适配大屏当页面首次加载时,判断视口的宽高,如果视口的宽/高 > 16/9 则说明视口宽度比较设计图宽,实际的显示宽度应该等于视口的高度*16/9。如果视口的宽/高 < 16/9 则说明视口高度比设计图高,实际的显示宽度应该等于视口的宽度,显示高度应等_大屏还原ui适配宽度
文章浏览阅读3.3k次。1. 查看计划任务ls /var/spool/cron删除异常任务其配置项。如果当前系统之前并未配置过计划任务,可以直接删除计划脚本目录即可:rm -rf /var/spool/cron/*2. 查看密钥认证文件删除木马创建的密钥认证文件,如果当前系统之前并未配置过密钥认证,可以直接清空认证存放目录:rm -rf /root/.ssh/*如果有配置过密钥认证,需要删除指定的黑客创建的认证文件即可。3. 修复 SSH 配置项一般默认脚本中进行修改的 PermitRootLogin、R._xmrig miner怎么彻底清除
文章浏览阅读358次。原作者:Julie Zhuo,前Facebook产品设计副总裁原文地址:https://medium.com/the-year-of-the-looking-glass/how-to-work-with-engineers-a3163ff1eced很久以前,我当过项目经理。之后,我成为了工程师。最近7年,我担任产品设计师。每天我都与这三个岗位的人一起工作。每天,我都能发现新的方式来理解这产品研发背后的三大支柱的职责、挑战和艺术。研发工程师是魔术师,他们只需要轻轻动几下手指调整像素,瞧,一个能运作的产_研发是把想法变成现实的桥梁
文章浏览阅读410次。开发完成后的波形显示控件,可以快速嵌入到.NET平台下的软件工程中,开发者只需简单的操作,就可以使用该控件友好地显示波形数据,从而达到快速开发的目的。本文先介绍了.NET平台下用户控件开发的基本方法,以及用C#描述的GDI+图形开发技术,然后提出一种基于C#的波形显示控件的设计思路,并对波形坐标值转换、坐标标尺、工具栏、局部放大等具体的设计细节进行详细解析。该波形显示控件能够根据当前要显示的波形数据的值,自动选择最佳的坐标范围,来直观地在控件的波形显示区域显示完整的波形曲线。关键词:波形显示控件;_c# 波形图控件
文章浏览阅读338次。计算机等级考试二级C语言程序设计第17章上机指导第17章 上机指导 17.1 上机考试简介 上机考试包括三个部分:程序填空题、程序改错题和程序设计题。填空和改错部分如果有指定的结果输出文件时,只要运行结果正确即可得满分,如果运行结果有错误或无结果文件输出时,则上机考试系统将对其修改或填充部分进行检测,如果其内容全部正确,则也可以得满分,如果部分正确,则按比例进行给分。而程序编制、调试运行类..._计算机二级c语言改错如果运行结果正确
文章浏览阅读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作用
文章浏览阅读1.2k次。1、Dubbo框架2、重构京淘项目:JT-WEB/JT-SSO3、用户注册4、单点登录系统5、用户登出/完成用户数据6、封装cookie工具7、实现商品信息远程调用8、购物模块:jt-cart,CRUD操作_dubbo登录登出
文章浏览阅读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火狐跨域问题
文章浏览阅读3k次,点赞7次,收藏29次。第九章《用户自己建立数据类型》习题答案 1.定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。2.写一个函数days,实现第1 题的计算。由主函数将年、月、日传递给days函数,计算后将日子数传回主函数输出。3.编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个记录包括num,name,score[3],用主函数输人这些记录,用print函数输出这些记录。4.在第3题的基础上,编写一个函数input,用来输人5个学生的数据记录。5.有10个学生,_c程序设计第五版谭浩强课后答案第九章