基于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框架,我们能够构建一个功能强大的数据服务。后续可以根据具体需求进行更深入的分析和复杂的功能扩展,例如影片推荐系统或用户评分系统等。这将帮助我们更好地理解和利用这些数据。