毕业设计-基于大数据的电影爬取与可视化分析系统-python

Posted HaiLang_IT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了毕业设计-基于大数据的电影爬取与可视化分析系统-python相关的知识,希望对你有一定的参考价值。

目录

前言

课题背景和意义

实现技术思路

实现效果图样例


前言


    📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

🚀对毕设有任何疑问都可以问学长哦!

选题指导: https://blog.csdn.net/qq_37340229/article/details/128243277

大家好,这里是海浪学长毕设专题,本次分享的课题是

🎯基于大数据的电影爬取与可视化分析系统

课题背景和意义

随着信息技术的发展,爬取和可视化分析系统作为一种重要的数据获取和分析方法,已经得到了广泛的应用。大数据技术为爬取和可视化分析系统提供了可靠的技术支持,使之能够更好地收集和分析大量复杂的数据。电影爬取与可视化分析系统是基于大数据技术的一种新型的电影分析系统,它可以有效收集和分析大量电影数据,从而为电影行业提供有价值的洞察。 电影爬取与可视化分析系统是一个由爬虫、数据存储、数据清洗、可视化分析等模块组成的系统。爬虫模块是核心模块,它可以从网络上收集大量的电影数据,如电影的类型、导演、主演、评分、时长等信息。数据存储模块可以将爬取到的数据存储在多种数据库中,以便后续的分析。数据清洗模块可以对收集到的数据进行清洗,去除重复、无效的数据,使得数据更加清洁、有用。可视化分析模块可以使用各种可视化工具,如折线图、柱状图等,将收集到的数据进行可视化分析,从而使行业内的电影分析更加直观、准确。 通过电影爬取与可视化分析系统,可以有效收集和分析大量的电影数据,为电影行业提供客观、准确的分析报告,从而帮助电影行业更好地把握市场趋势,制定更为合理的发行策略。

实现技术思路

数据爬取

爬取数据的步骤过程:第一,进入网站电影界面, 获取该网页的URL,通过查看网页源代码找到目标数据位置 并分析网页源代码结构;第二,论文使用Python中的requests 库进行数据采集;Beautiful-Soup是一个html/XML的解析 器,来解析URL的文本信息;第三,根据需要单独提取出电 影的评分、电影的演员、电影年份和电影类型;第四,利用循 环进行读取数据并存入数据库。

# Import libraries
import requests
import lxml.html as lh
import pandas as pd

# Get the webpage
url = 'http://www.example.com/movie_data'
page = requests.get(url)
# Create a handle to the webpage
doc = lh.fromstring(page.content)
# Parse the table data
tr_elements = doc.xpath('//tr')
# Create empty list
col=[]
i=0
# For each row, store each first element (header) and an empty list
for t in tr_elements[0]:
    i+=1
    name=t.text_content()
    col.append((name,[]))
# Create the dataframe
movie_data = pd.DataFrame(title:column for (title,column) in col)
# Going through each row
for j in range(1,len(tr_elements)):
    # T is our j'th row
    T=tr_elements[j]
    
    # If row is not of size 10, the //tr data is not from our table 
    if len(T)!=10:
        break
    
    # i is the index of our column
    i=0
    
    # Iterate through each element of the row
    for t in T.iterchildren():
        data=t.text_content() 
        # Append the data to the empty list of the i'th column
        col[i][1].append(data)
        # Increment i for the next column
        i+=1
# Update the dataframe
movie_data = pd.DataFrame(title:column for (title,column) in col)
# Print the dataframe
print(movie_data)

数据预处理

在真实世界里,数据来源各式各样质量良莠不齐,所以 原始数据一般是有缺陷的,不完整的,重复的,是极易受侵染 的。这样的数据处理起来不仅效率低下而且结果也不尽人意, 这种情况下数据的预处理显得尤为重要。一方面,数据预处理 把原始数据规范化、条理化,最终整理成结构化数据,极大地 节省了处理海量信息的时间;另一方面,数据预处理可以使得 挖掘愈发准确并且结果愈发真实有效。

# 导入库
import pandas as pd
import numpy as np

# 读取csv文件
df = pd.read_csv('movie_data.csv')

# 检查丢失值
missing_values = df.isnull().sum()

# 对于缺失值,用平均值代替
df = df.fillna(df.mean())

# 检查重复值
duplicate_values = df[df.duplicated()]

# 删除重复值
df = df.drop_duplicates()

# 处理分类变量
# 将字符串变量转换为数值变量
df['genre'] = df['genre'].astype('category')
df['genre'] = df['genre'].cat.codes

# 将时间变量转换为数值变量
df['release_date'] = pd.to_datetime(df['release_date'])
df['release_year'] = df['release_date'].dt.year

# 归一化数值变量
# 对于数值变量,将其缩放到0-1之间
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df[['runtime', 'rating']] = scaler.fit_transform(df[['runtime', 'rating']])

# 输出处理后的数据
df.head()

数据分析及可视化

 

import matplotlib.pyplot as plt
import pandas as pd

# 读取电影数据
df=pd.read_csv("movies_data.csv")

# 画出票房收入与上映月份的折线图
plt.plot(df["Month"],df["Revenue"])
plt.xlabel("Month")
plt.ylabel("Revenue")
plt.title("Revenue vs Month")
plt.show()

# 画出票房收入与上映年份的折线图
plt.plot(df["Year"],df["Revenue"])
plt.xlabel("Year")
plt.ylabel("Revenue")
plt.title("Revenue vs Year")
plt.show()

# 画出票房收入与上映国家的横向条形图
plt.barh(df["Country"],df["Revenue"])
plt.xlabel("Revenue")
plt.ylabel("Country")
plt.title("Revenue vs Country")
plt.show()

随着电影行业的不断发展,必将越来越依靠于数据分析 的手段来获取收益。对演员和其电影口碑分析可以得出演员的的票房号召力;从票房分析影片类型对于观众的接受度、导演 的人气指数等等,都具有很强的经济效益。观众群体的广泛性 和个人情感的复杂性都影响着影业的未来发展[4]。 论文从四个角度对电影信息数据进行分析:第一,从评 分的占比角度入手分析观众对电影市场的认可程度;第二,从 评论人数与评分入手分析观影潮流,第三,从电影年份和评分 关系入手分析历年电影口碑分化趋势;第四,从电影类型入手 分析时下热门电影素材类型。

实现效果图样例

我是海浪学长,创作不易,欢迎点赞、关注、收藏、留言。

毕设帮助,疑难解答,欢迎打扰!

最后

毕业设计基于大数据的招聘职业爬取与分析可视化

文章目录


0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 **基于大数据的招聘职业爬取与分析可视化 **

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:3分

🧿 选题指导, 项目分享:

https://gitee.com/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md

1 课题背景

基于Python网络爬虫、Flask Web框架实现的职业能力大数据可视化服务平台

2 实现效果

首页

学生专区首页
点击导航栏的学生专区,进入学生专区首页。首页以表格+文字的形式展示数据。但是可能因为屏幕尺寸的原因出现错位。导航栏有查看职业信息与职业分析与推荐两个部分,后者需要登录。

职业信息界面
职业信息界面以卡片的方式展示了各种职业的信息。点击上面右边的文字可以进行筛选,点击左边的城市、分类、薪资可以进入相应的可视化界面。




职业分析界面
进行职业分析前需要先登录和注册,填写表单即可。

职业分析界面,填写表单即可。需要注意不能留空,不然会打回来重填。填写完提交即可,生成推荐职业。

学校专区
学校专区的界面就比较简单了,首页展示各学校的就业网网址,就业政策展示教育部的就业政策:


3 Flask框架

简介

Flask是一个基于Werkzeug和Jinja2的轻量级Web应用程序框架。与其他同类型框架相比,Flask的灵活性、轻便性和安全性更高,而且容易上手,它可以与MVC模式很好地结合进行开发。Flask也有强大的定制性,开发者可以依据实际需要增加相应的功能,在实现丰富的功能和扩展的同时能够保证核心功能的简单。Flask丰富的插件库能够让用户实现网站定制的个性化,从而开发出功能强大的网站。

本项目在Flask开发后端时,前端请求会遇到跨域的问题,解决该问题有修改数据类型为jsonp,采用GET方法,或者在Flask端加上响应头等方式,在此使用安装Flask-CORS库的方式解决跨域问题。此外需要安装请求库axios。

Flask框架图

相关代码:

from flask import Flask, render_template,request, Response, make_response,redirect
from functions import login,job_info,job_analyse,school,policy,register
from functions.config import SQLManager

# 实例化并命名为app实例
app = Flask(__name__,
            static_folder='static',  # 配置静态文件的文件夹
            template_folder='templates')


# 一些简单界面的路由
@app.route('/')
def index_view():
    return render_template('index.html')

@app.route('/info')
def info_view():
    return render_template('info.html')

@app.route('/echarts')
def echarts():
    return render_template('echarts.html')

@app.route('/student')
def student_view():
    cook=request.cookies.get('username')
    if cook is None:
        cook=''
    return render_template('student.html',user=cook)

@app.route('/student/job_info/city')
def city_view():
    cook=request.cookies.get('username')
    if cook is None:
        cook=''
    return render_template('city.html',user=cook)

@app.route('/student/job_info/salary')
def salary_view():
    cook=request.cookies.get('username')
    if cook is None:
        cook=''
    return render_template('salary.html',user=cook)

@app.route('/student/job_info/category')
def category_view():
    cook=request.cookies.get('username')
    if cook is None:
        cook=''
    return render_template('category.html',user=cook)

@app.route('/student/job_info/class/<cate>')
def cate_view(cate):
    a=SQLManager()
    i=a.get_one('select id from class where class_name=""'.format(cate))['id']
    return redirect('/student/job_info?category='.format(i))

# 引入蓝图对象
app.register_blueprint(login.login)
app.register_blueprint(job_info.job_info)
app.register_blueprint(job_analyse.job_analyse)
app.register_blueprint(school.school)
app.register_blueprint(policy.policy)
app.register_blueprint(register.register)

# 调用run方法,设定端口号,启动服务
if __name__ == "__main__":
    app.run(port=2022, host="0.0.0.0", debug=True)

4 数据爬虫

简介

Scrapy是基于Twisted的爬虫框架,它可以从各种数据源中抓取数据。其架构清晰,模块之间的耦合度低,扩展性极强,爬取效率高,可以灵活完成各种需求。能够方便地用来处理绝大多数反爬网站,是目前Python中应用最广泛的爬虫框架。Scrapy框架主要由五大组件组成,它们分别是调度器(Scheduler)、下载器(Downloader)、爬虫(Spider)和实体管道(Item Pipeline)、Scrapy引擎(Scrapy Engine)。各个组件的作用如下:

  1. 调度器(Scheduler):说白了把它假设成为一个URL(抓取网页的网址或者说是链接)的优先队列,由它来决定下一个要抓取的网址是 什么,同时去除重复的网址(不做无用功)。用户可以自己的需求定制调度器。

  2. 下载器(Downloader):是所有组件中负担最大的,它用于高速地下载网络上的资源。Scrapy的下载器代码不会太复杂,但效率高,主要的原因是Scrapy下载器是建立在twisted这个高效的异步模型上的(其实整个框架都在建立在这个模型上的)。

  3. 爬虫(Spider):是用户最关心的部份。用户定制自己的爬虫(通过定制正则表达式等语法),用于从特定的网页中提取自己需要的信息,即所谓的实体(Item)。 用户也可以从中提取出链接,让Scrapy继续抓取下一个页面。

  4. 实体管道(Item Pipeline):用于处理爬虫(spider)提取的实体。主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。

  5. Scrapy引擎(Scrapy Engine):Scrapy引擎是整个框架的核心.它用来控制调试器、下载器、爬虫。实际上,引擎相当于计算机的CPU,它控制着整个流程。

官网架构图

相关代码:

# -*- coding: utf-8 -*-

import scrapy
import random
import time
from foodwake.items import FoodwakespiderItem


class FoodwakeSpider(scrapy.Spider):
    name = 'foodwake'
    allowed_domains = ['www.foodwake.com']
    start_urls = ['http://www.foodwake.com/category/food-class/0']

    # //:匹配任意位置的节点 @:匹配属性
    def parse(self, response): 
        for box in response.xpath('//div[@class="row margin-b2"]//a'):
            new_url = box.xpath('.//@href').extract()[0]
            yield scrapy.http.Request(new_url, callback=self.parse_item)

    def parse_item(self, response):
        for box in response.xpath('//div[@class="row margin-b2"]//a'):
            new_url = box.xpath('.//@href').extract()[0]
            yield scrapy.http.Request(new_url, meta="url": new_url, callback=self.parse_item_info)

    def parse_item_info(self, response):
        item = FoodwakespiderItem()
        name = response.xpath('//h1[@class="color-yellow"]/text()').extract()[0].strip()
        # food_nickname = ""
        # try:
        #     nicknames = response.xpath('//h2[@class="h3 text-light"]/text()').extract()[0].strip()
        #     food_nickname = nicknames.split(':')[1]
        # except:
        #     food_nickname = "无"
        # url = response.meta["url"]
        infoList = []
        for box in response.xpath('//table[@class="table table-hover"]//tr'):
            tds = box.xpath('.//td')
            if len(tds) == 3:
                info = 
                td_name = tds.xpath('.//text()').extract()[0]
                td_unit = tds.xpath('.//text()').extract()[1]
                td_value = ""
                try:
                    td_value = td_unit + tds.xpath('.//text()').extract()[2]
                    info[td_name] = td_value
                except:
                    info[td_name] = td_unit
                infoList.append(info)
        item['name'] = name
        item['info'] = str(infoList)
        # item['url'] = url
        # item['nickname'] = food_nickname
        yield item
        print("······休眠 1 至 5 秒······")
        time.sleep(random.randint(1, 5))

5 最后

以上是关于毕业设计-基于大数据的电影爬取与可视化分析系统-python的主要内容,如果未能解决你的问题,请参考以下文章

Python毕业设计 大数据招聘网站爬取与数据分析可视化 - flask

毕业设计之 - 题目:基于大数据的电影数据分析可视化系统

Python | 新冠肺炎疫情数据的爬取与可视化分析

基于Python实现的电影数据可视化分析系统附完整代码

基于SSM疫情信息爬取与分析系统

药大贴吧用户数据资料爬取与简单分析