基于Python+Django的影片数据爬取与数据分析设计与实现

在现代互联网时代,获取和分析数据变得尤为重要。影片数据作为一种特殊的数据类型,包含了丰富的信息,如影片名称、评分、类型、上映日期等。通过使用Python进行爬虫技术,我们可以轻松获取这些数据,然后结合Django框架进行数据的存储与展示,接着我们可以进行进一步的分析和可视化。

一、环境准备

在开始之前,请确保你已经安装了以下软件包:

pip install Django requests beautifulsoup4 pandas matplotlib

二、数据爬取

我们使用 requests 库来获取网页数据,BeautifulSoup 用于解析HTML。以豆瓣电影为例,我们可以爬取一些基本的影片信息。

代码示例

import requests
from bs4 import BeautifulSoup

def fetch_movies(page):
    url = f'https://movie.douban.com/top250?start={page*25}&filter='
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')

    movies_list = []
    for item in soup.find_all('div', class_='item'):
        title = item.find('span', class_='title').text
        rating = item.find('span', class_='rating_num').text
        quote = item.find('span', class_='inq').text if item.find('span', class_='inq') else None

        movies_list.append({
            'title': title,
            'rating': rating,
            'quote': quote
        })

    return movies_list

if __name__ == "__main__":
    all_movies = []

    for i in range(10):  # 爬取前250部电影
        movies = fetch_movies(i)
        all_movies.extend(movies)

    print(all_movies)

上述代码中,我们定义了 fetch_movies 函数,通过对豆瓣电影TOP 250页面的解析,获取影片名称、评分和评论信息。

三、Django项目创建与数据存储

接下来,我们创建一个Django项目来存储这些影片数据。

创建Django项目并设置模型

django-admin startproject movie_project
cd movie_project
django-admin startapp movies

movies/models.py 中定义影片模型:

from django.db import models

class Movie(models.Model):
    title = models.CharField(max_length=200)
    rating = models.FloatField()
    quote = models.TextField(null=True, blank=True)

    def __str__(self):
        return self.title

数据迁移与管理

运行以下命令进行数据迁移:

python manage.py makemigrations
python manage.py migrate

之后,我们可以使用 Django 的 admin 界面来查看和管理影片数据,需要在 movies/admin.py 中注册模型:

from django.contrib import admin
from .models import Movie

admin.site.register(Movie)

四、数据分析

在数据存储后,我们可以使用 pandas 进行简单的分析,比如找出评分最高的几部影片。

数据分析代码示例

import pandas as pd
from movies.models import Movie

def analyze_movies():
    movies = Movie.objects.all().values()
    df = pd.DataFrame(movies)

    # 找出评分最高的10部影片
    top_movies = df.sort_values(by='rating', ascending=False).head(10)
    print(top_movies)

if __name__ == "__main__":
    analyze_movies()

数据可视化

可以使用 matplotlib 来绘制影片评分的分布图:

import matplotlib.pyplot as plt

def plot_ratings():
    movies = Movie.objects.all().values()
    df = pd.DataFrame(movies)

    plt.figure(figsize=(10,6))
    plt.hist(df['rating'], bins=10, color='blue', alpha=0.7)
    plt.title('电影评分分布')
    plt.xlabel('评分')
    plt.ylabel('频率')
    plt.show()

if __name__ == "__main__":
    plot_ratings()

五、总结

通过上述步骤,我们成功实现了一个简单的影片数据爬取、存储和分析的项目。结合Python的爬虫能力与Django的web框架,我们能够构建一个功能强大的数据服务。后续可以根据具体需求进行更深入的分析和复杂的功能扩展,例如影片推荐系统或用户评分系统等。这将帮助我们更好地理解和利用这些数据。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部