猫眼电影MySQL数据库怎么写_MySQL简要分析猫眼电影
TOP100榜
作者:国服帅座 经济学在读硕⼠
:统计之家
提出问题
对于⼴⼤电影爱好者来说,猫眼平台提供了海量电影信息。在其官⽹上有⼀个TOP100榜单,我们使⽤SQL语句简单分析该榜单电影,试图了解如下这些信息。
评分最⾼的电影
评分最低的电影
上映时间最早的电影
周星驰主演的电影
按年份统计上映电影数量
diag开发工程师分别统计喜剧⽚和恐怖⽚的数量
观影时间超过180分钟的电影
获得数据
本⽂数据由笔者利⽤selenium爬取,爬⾍代码附在⽂末。爬虫软件 app
在爬⾍前先在MySQL中创建名为“maoyan”的数据库,然后创建名为“top100”的数据表,然后在爬⾍时将每条记录导⼊该表。
表中共有6个字段,100条记录。
title:电影名称
minute:电影时长,单位“分钟”
score:电影在猫眼⽹站上的评分
excel表格产生随机数
stage:电影上映的年代
style:电影所属类型,并不单⼀
actor:电影主演,基本都是三位演员名字
分析数据
1.评分最⾼的电影
SELECT * FROM top100
WHERE score = (SELECT MAX(score) FROM top100);
分析:周星驰的《⼤话西游之⽉光宝盒》确实能打,全榜最⾼的9.6分!mysql数据库的备份命令
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
plc学好了工资高吗WHERE minute > 180;
分析:观影时间最长为《乱世佳⼈》,⼏乎4⼩时!
爬⾍代码
from selenium import webdriver
import time
import re
import pymysql
driver = webdriver.Chrome()
url_list = ["maoyan/board/4?offset={}".format(i) for i in range(0,91,10)]
conn = t(host='localhost',port=3307,user='root',password='usbw',db='maoyan',charset='utf8')
cursor = conn.cursor() # 提前在MySQL创建数据库maoyan,创建表格top100
for url in url_list:
<(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 > vie-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 > vie-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 > vie-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 > vie-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 > vie-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 > vie-item-info > p.name > a').click()
time.sleep(1)
style = driver.find_element_by_css_selector('body > div.banner > div > leInfo-right.clearfix > vie-brief-container > ul > li:nth-child(1)').text
length = driver.find_element_by_css_selector('body > div.banner > div > leInfo-right.clearfix > vie-brief-container > ul > li:nth-child(2)').text
m = re.search('(.*)/(.*)', length) # 正则表达式,只要电影时长
minute = m.group(2).rstrip('分钟')
connmit() # 提交插⼊⾄数据库
driver.back() # 返回上级页⾯
time.sleep(1)
cursor.close()
conn.close()
往期精彩传送

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。