豆瓣电影Top250爬虫与可视化分析平台开发实战

技术选型与架构设计

技术栈选择

  1. Python:作为主要开发语言,用于实现爬虫和Web应用
  2. Flask:轻量级Web框架,用于搭建后端服务
  3. BeautifulSoup:HTML解析库,用于提取网页数据
  4. SQLite3:轻量级数据库,用于存储电影信息
  5. Echarts:数据可视化库,用于展示评分分布和词频统计
  6. WordCloud:词云生成库,用于生成电影名称词云图

项目架构

核心代码实现

网络爬虫实现
python 复制代码
# 导入必要的库
import urllib.request
from bs4 import BeautifulSoup
import re
import sqlite3
import xlwt

# 定义爬取函数
def get_movie_info(url):
    # 发送HTTP请求
    response = urllib.request.urlopen(url)
    html = response.read().decode('utf-8')
    
    # 解析HTML页面
    soup = BeautifulSoup(html, 'html.parser')
    
    # 提取电影信息
    movies = []
    movie_items = soup.find_all('div', class_='item')
    
    for item in movie_items:
        movie = {}
        # 提取电影排名
        movie['rank'] = re.findall(r'\d+', item.find('em').text)[0]
        # 提取电影名称
        movie['title'] = item.find('span', class_='title').text
        # 提取评分
        movie['rating'] = item.find('span', class_='rating_num').text
        # 提取评价人数
        movie['votes'] = re.findall(r'\d+', item.find('div', class_='star').find_all('span')[-1].text)[0]
        # 提取一句话概述
        quote = item.find('span', class_='inq')
        movie['quote'] = quote.text if quote else ''
        
        movies.append(movie)
    
    return movies

# 主函数
def main():
    base_url = 'https://movie.douban.com/top250?start='
    movies = []
    
    # 爬取10页数据
    for i in range(0, 250, 25):
        url = base_url + str(i)
        page_movies = get_movie_info(url)
        movies.extend(page_movies)
    
    # 保存到Excel文件
    save_to_excel(movies)
    
    # 保存到SQLite数据库
    save_to_sqlite(movies)

if __name__ == '__main__':
    main()
Web应用实现
python 复制代码
# 导入必要的库
from flask import Flask, render_template, request
import sqlite3
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image

# 初始化Flask应用
app = Flask(__name__)

# 首页路由
@app.route('/')
def index():
    return render_template('index.html')

# 电影列表路由
@app.route('/movies')
def movies():
    # 从数据库中获取电影信息
    conn = sqlite3.connect('top250.db')
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM movies')
    movies = cursor.fetchall()
    conn.close()
    
    return render_template('movies.html', movies=movies)

# 评分分布路由
@app.route('/rating')
def rating():
    # 从数据库中获取评分数据
    conn = sqlite3.connect('top250.db')
    cursor = conn.cursor()
    cursor.execute('SELECT rating FROM movies')
    ratings = cursor.fetchall()
    conn.close()
    
    # 处理评分数据
    rating_distribution = {}
    for rating in ratings:
        rating = float(rating[0])
        rating_range = f"{int(rating)}-{int(rating)+0.9}"
        if rating_range in rating_distribution:
            rating_distribution[rating_range] += 1
        else:
            rating_distribution[rating_range] = 1
    
    return render_template('rating.html', rating_distribution=rating_distribution)

# 词频统计路由
@app.route('/wordcloud')
def wordcloud():
    # 从数据库中获取电影名称
    conn = sqlite3.connect('top250.db')
    cursor = conn.cursor()
    cursor.execute('SELECT title FROM movies')
    titles = cursor.fetchall()
    conn.close()
    
    # 对电影名称进行分词
    words = []
    for title in titles:
        words.extend(jieba.lcut(title[0]))
    
    # 生成词云图
    wordcloud = WordCloud(
        font_path='simhei.ttf',
        background_color='white',
        mask=np.array(Image.open('cat.jpg'))
    ).generate(' '.join(words))
    
    # 保存词云图
    wordcloud.to_file('static/wordcloud.png')
    
    return render_template('wordcloud.html')

# 启动应用
if __name__ == '__main__':
    app.run(debug=True)

项目成果与展示

本项目成功爬取豆瓣电影Top250的完整信息,涵盖电影排名、名称、评分、评价人数和一句话概述等核心数据,并将数据持久化存储到Excel文件和SQLite数据库中。基于Flask框架搭建的Web应用实现了四大核心功能模块:首页展示项目简介与热门电影推荐、电影列表页呈现完整Top250电影信息、评分分布页通过Echarts可视化展示不同评分区间的电影数量与占比、词云页生成以猫咪图片为背景的电影名称高频词汇云图,全方位满足用户对电影信息的浏览、查询和分析需求。





项目总结与展望

通过这个项目,我不仅提升了Python编程能力,还学习了网络爬虫、数据处理和Web开发等技术。项目中遇到的主要挑战是豆瓣反爬虫机制的处理。

未来进一步优化的方面:

  1. 实现电影搜索和筛选功能
  2. 增加用户评论和评分功能
  3. 优化词云图生成算法,提高展示效果

这个项目展示了我在Python开发、数据处理和Web应用开发方面的能力,也为我今后的学习和工作打下了坚实的基础。

相关推荐
天天进步20152 小时前
多线程与分布式:使用 Botasaurus 轻松构建大规模数据采集集群
分布式·爬虫
B站计算机毕业设计超人4 小时前
计算机毕业设计Python+大模型音乐推荐系统 音乐数据分析 音乐可视化 音乐爬虫 知识图谱 大数据毕业设计
人工智能·hadoop·爬虫·python·数据分析·知识图谱·课程设计
喵手4 小时前
Python爬虫零基础入门【第三章:Requests 静态爬取入门·第5节】限速与礼貌爬取:并发、延迟、频率控制!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·requests静态爬取·限速与爬取
喵手5 小时前
Python爬虫零基础入门【第三章:Requests 静态爬取入门·第1节】你的第一个爬虫:抓取页面并保存 HTML!
爬虫·python·爬虫实战·python爬虫工程化实战·requests静态爬取·抓取网页并保存html·零基础入门python爬虫
喵手5 小时前
Python爬虫零基础入门【第三章:Requests 静态爬取入门·第2节】伪装与会话:Headers、Session、Cookie(合规使用)!
爬虫·python·python爬虫实战·python爬虫工程化实战·requests静态爬取·伪装与会话·零基础python爬虫入门
小白学大数据5 小时前
绕过拼多多 App 反抓包机制的综合逆向解决方案
开发语言·爬虫·python·自动化
love_521_8 小时前
永城信息网爬虫
爬虫
喵手10 小时前
《Python爬虫工程化实战》专栏导读|从“脚本能跑”到“系统能交付”:零基础也能做出可部署的 Python 爬虫!
爬虫·python·网络爬虫·爬虫实战·python爬虫·python爬虫工程化·爬虫实战教学
是Yu欸12 小时前
实时获取 Google 相关股票新闻并完成自动化总结
运维·爬虫·自动化·股票·新闻·亮数据·bringdata