首页 > Python资料 博客日记

大数据毕业设计:Python豆瓣电影数据爬取+清洗+可视化分析系统 ✅

2024-06-20 22:00:06Python资料围观93

Python资料网推荐大数据毕业设计:Python豆瓣电影数据爬取+清洗+可视化分析系统 ✅这篇文章给大家,欢迎收藏Python资料网享受知识的乐趣

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏)

毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、项目介绍

技术栈:
Python语言、Flask框架、MySQL数据库、requests爬虫技术、Echarts可视化、爬虫+清洗+可视化、豆瓣电影数据

2、项目界面

(1)电影制片地区饼图分析

(2)电影数据信息

(3)首页

(4)电影数据漏斗图分析

(5)饼图分析

(6)电影类型数据柱状图

(7)导演作品柱状图分析

(8)评分与评论人数散点图

(9)每年电影数量折线图

(10)数据采集页面

3、项目说明

豆瓣电影数据采集分析可视化系统是基于Python语言和Flask框架开发的一款应用程序。它主要通过使用requests爬虫技术,从豆瓣电影网站上采集电影相关数据,并将其存储在MySQL数据库中。

该系统的主要功能包括数据采集、数据清洗以及可视化分析。首先,通过编写爬虫程序,系统可以自动从豆瓣电影网站上抓取电影的各种信息,如电影名称、评分、导演、演员等。获取到的原始数据会经过清洗处理,去除重复的数据、空值以及不符合要求的数据,以确保数据的准确性和完整性。

接下来,系统会利用Echarts可视化库,将清洗后的数据进行可视化分析。通过生成各种图表和图形,如柱状图、折线图、饼图等,系统可以直观地展示电影数据的统计结果和趋势变化。用户可以通过交互式界面,自定义查询条件和筛选参数,从而获取到特定范围内的电影数据,并进行更深入的分析和比较。

豆瓣电影数据采集分析可视化系统的应用场景广泛。它可以帮助电影从业人员了解当前热门电影及其评分情况,以便做出更好的决策。同时,它也可以作为电影爱好者的工具,用于查找感兴趣的电影、了解电影的评价和口碑等信息。

总之,豆瓣电影数据采集分析可视化系统结合了爬虫技术、数据清洗和可视化分析,为用户提供了一个方便、直观的电影数据查询和分析工具。通过对豆瓣电影数据的采集、清洗和可视化,用户可以更好地理解电影市场的动态,并做出更明智的决策。

4、核心代码



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()

源码获取:

🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻


版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐