赞
踩
博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏)
毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总
技术栈:
Python语言、Flask框架、MySQL数据库、requests爬虫技术、Echarts可视化、爬虫+清洗+可视化、豆瓣电影数据
(1)电影制片地区饼图分析
(2)电影数据信息
(3)首页
(4)电影数据漏斗图分析
(5)饼图分析
(6)电影类型数据柱状图
(7)导演作品柱状图分析
(8)评分与评论人数散点图
(9)每年电影数量折线图
(10)数据采集页面
豆瓣电影数据采集分析可视化系统是基于Python语言和Flask框架开发的一款应用程序。它主要通过使用requests爬虫技术,从豆瓣电影网站上采集电影相关数据,并将其存储在MySQL数据库中。
该系统的主要功能包括数据采集、数据清洗以及可视化分析。首先,通过编写爬虫程序,系统可以自动从豆瓣电影网站上抓取电影的各种信息,如电影名称、评分、导演、演员等。获取到的原始数据会经过清洗处理,去除重复的数据、空值以及不符合要求的数据,以确保数据的准确性和完整性。
接下来,系统会利用Echarts可视化库,将清洗后的数据进行可视化分析。通过生成各种图表和图形,如柱状图、折线图、饼图等,系统可以直观地展示电影数据的统计结果和趋势变化。用户可以通过交互式界面,自定义查询条件和筛选参数,从而获取到特定范围内的电影数据,并进行更深入的分析和比较。
豆瓣电影数据采集分析可视化系统的应用场景广泛。它可以帮助电影从业人员了解当前热门电影及其评分情况,以便做出更好的决策。同时,它也可以作为电影爱好者的工具,用于查找感兴趣的电影、了解电影的评价和口碑等信息。
总之,豆瓣电影数据采集分析可视化系统结合了爬虫技术、数据清洗和可视化分析,为用户提供了一个方便、直观的电影数据查询和分析工具。通过对豆瓣电影数据的采集、清洗和可视化,用户可以更好地理解电影市场的动态,并做出更明智的决策。
from bs4 import BeautifulSoup import re import urllib.request,urllib.error import xlwt import time import random import sqlite3 def main(): baseurl = "https://movie.douban.com/top250?start=" #1.爬取网页 datalist = getData(baseurl) savepath='豆瓣Top250.xls' saveData(datalist,savepath) # askURL(baseurl) #爬取网页 def getData(baseurl): #存储详情页链接 href_list =[] #存储所有电影的信息 datalist = [] ''' 0*25=0 1*25=25 ... ''' #调用获取页面信息的函数 10次 for i in range(0,10): time.sleep(random.random() * 5) url = baseurl + str(i*25) #保存网页源码 html = askURL(url) #2.逐一解析数据 bs = BeautifulSoup(html,'html.parser') #找到所有的class=item的div,并保存到列表中 item_list = bs.find_all('div',class_='item') #查找符合要求的字符串 for item in item_list: #正则表达式是字符串匹配,需要把item转化为字符串 item = str(item) #提取详情页链接 detail_href = re.findall(r'<a href="(.*?)">',item)[0] # print(detail_href) href_list.append(detail_href) # print(href_list) # print(item) for href in href_list: time.sleep(random.random() * 5) #获取详情页源码 detail_html = askURL(href) # print(detail_html) #保存一部电影的所有信息 data = [] # 获取片名 title = '' try: title = re.findall(r'"v:itemreviewed">(.*?)</span>', detail_html)[0] except: print("获取片名失败") data.append(title) # 获取导演名 director = '' try: director = re.findall(r'"v:directedBy">(.*?)</a>', detail_html)[0] except: print("获取导演信息失败") data.append(director) # print(director) # 获取第一编剧 scriptwriter = '' try: scriptwriter = re.findall(r"编剧.*?: <span class='attrs'><a href=.*?>(.*?)</a>", detail_html)[0] except: print("获取编剧信息失败") data.append(scriptwriter) # 获取第一主演 star = '' try: star = re.findall(r'rel="v:starring">(.*?)</a>', detail_html)[0] except: print("获取演员信息失败") data.append(star) # print(star) # 获取类型 filmtype = '' try: filmtype = re.findall(r'"v:genre">(.*?)</span>', detail_html)[0] except: print("获取电影类型信息失败") data.append(filmtype) # print(filmtype) # 获得制片国家 country = '' try: country = re.findall(r'<span class="pl">制片国家/地区:</span> (.*?)<br/>', detail_html)[0] except: print("获取制片国家失败") data.append(country) # print(country) # 获得语言 lag = '' try: lag = re.findall(r'<span class="pl">语言:</span> (.*?)<br/>', detail_html)[0] except: print("获取语言失败") data.append(lag) # print(lag) # 获得片长 runtime = '' try: runtime = re.findall(r'<span property="v:runtime" content="(.*?)">', detail_html)[0] except: print("获取片长失败") data.append(runtime) # print(runtime) # 获得评分 ---------------- score = '' try: score = re.findall(r'property="v:average">(.*?)</strong>', detail_html)[0] except: print("获取评分失败") data.append(score) # print(score) # 获得评价人数 num = '' try: num = re.findall(r'<span property="v:votes">(.*?)</span>人评价', detail_html)[0] except: print("获取评价人数失败") data.append(num) # print(num) year = '' try: year = re.findall(r'<span class="year">(.*?)</span>', detail_html)[0] except: print("获取上映日期失败") data.append(year) # print(year) description = '' try: description = re.findall(r'<meta property="og:description" content="(.*?)" />', detail_html)[0] except: print("获取简介失败") data.append(description) # print(description) image = '' try: image = re.findall(r'<meta property="og:image" content="(.*?)" />', detail_html)[0] except: print("获取图片失败") data.append(image) # print(image) print(data) datalist.append(data) # print(datalist) return datalist #得到指定一个URL的网页内容 def askURL(url): #模拟浏览器头部信息,向豆瓣服务器发送消息 # headers = { # 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36' # } headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.66 Safari/537.36 Edg/103.0.1264.44' } content = '' #请求对象 req = urllib.request.Request(url,headers = headers) try: #得到响应信息 response = urllib.request.urlopen(req) #读取响应信息 content = response.read().decode('utf-8') # print(content) except urllib.error.URLError as e: #hasattr 检查指定属性是否存在 if hasattr(e,'code'): print(e.code) if hasattr(e,'reason'): print(e.reason) return content def saveData(datalist,savepath): # 创建workbook对象 workbook = xlwt.Workbook(encoding='utf-8',style_compression=0) # 创建工作表 worksheet = workbook.add_sheet('豆瓣电影Top250',cell_overwrite_ok=True) col = ('电影名','导演','编剧','主演','类型','制片国家','语言','片长','评分','评价人数','上映日期','简介','图片') for i in range(0,13): # 写入表头 worksheet.write(0,i,col[i]) for i in range(0,250): print('第%d条'%(i+1)) data = datalist[i] for j in range(0,13): worksheet.write(i+1, j, data[j]) workbook.save(savepath) #保存 if __name__ == '__main__': main()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。