拥有一个自己管理的个人影视库,可以优雅地整理收藏、记录观感,并摆脱在线平台的推荐绑架。本教程将指导您通过采集影视资源站的公开信息,快速搭建一个基于浏览器的本地个人影视库。
最终目标:一个运行在本地的Web应用,展示您采集/录入的影片信息,包括海报、简介、评分等,并支持搜索和分类筛选。
技术栈:Python (Flask/Django) + SQLite + HTML/CSS/JS。我们将使用Flask,因为它更轻量。
第一步:数据库设计
创建SQLite数据库movie_library.db,包含一张核心表:
CREATE TABLE movies ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, -- 片名 year INTEGER, -- 年份 director TEXT, -- 导演 actors TEXT, -- 主演(用逗号分隔) genre TEXT, -- 类型 rating REAL, -- 评分 summary TEXT, -- 简介 poster_local TEXT, -- 本地海报路径 origin_url TEXT -- 信息来源链接 );
第二步:编写采集模块(以TMDb API为例)
创建一个scraper.py文件,包含从TMDb搜索并获取电影信息的函数。
# scraper.py import requests import sqlite3 TMDB_API_KEY = ‘你的KEY’ def search_and_save_movie(movie_name): # 1. 搜索电影 search_url = f‘https://api.themoviedb.org/3/search/movie’ params = {‘api_key’: TMDB_API_KEY, ‘query’: movie_name, ‘language’: ‘zh-CN’} search_resp = requests.get(search_url, params=params).json() if not search_resp[‘results’]: print(‘未找到电影’) return # 取第一个结果 movie_id = search_resp[‘results’][0][‘id’] # 2. 获取详细信息 detail_url = f‘https://api.themoviedb.org/3/movie/{movie_id}’ detail_params = {‘api_key’: TMDB_API_KEY, ‘language’: ‘zh-CN’, ‘append_to_response’: ‘credits’} detail_data = requests.get(detail_url, params=detail_params).json() # 3. 解析并组织数据 movie_info = { ‘title’: detail_data.get(‘title’), ‘year’: int(detail_data.get(‘release_date’, ‘0000’).split(‘-’)[0]) if detail_data.get(‘release_date’) else None, ‘director’: ‘, ’.join([d[‘name’] for d in detail_data.get(‘credits’, {}).get(‘crew’, []) if d[‘job’] == ‘Director’]), ‘actors’: ‘, ’.join([a[‘name’] for a in detail_data.get(‘credits’, {}).get(‘cast’, [])[:5]]), # 取前5位主演 ‘genre’: ‘, ’.join([g[‘name’] for g in detail_data.get(‘genres’, [])]), ‘rating’: detail_data.get(‘vote_average’), ‘summary’: detail_data.get(‘overview’), ‘poster_path’: f”https://image.tmdb.org/t/p/w300{detail_data.get(‘poster_path’)}” if detail_data.get(‘poster_path’) else None, ‘origin_url’: f”https://www.themoviedb.org/movie/{movie_id}” } # 4. 保存到数据库(函数略) save_to_database(movie_info) # 5. (可选)下载海报到本地‘static/posters/’文件夹 download_poster(movie_info[‘poster_path’], movie_id)
您可以在 模板汇(code.jishujc.com) 找到更完整的影视库采集与入库脚本模板,它通常包含了错误处理、批量录入和更多的数据字段。
第三步:构建Flask Web应用
创建app.py文件:
# app.py from flask import Flask, render_template, request, jsonify import sqlite3 app = Flask(__name__) @app.route(‘/’) def index(): conn = sqlite3.connect(‘movie_library.db’) conn.row_factory = sqlite3.Row cur = conn.cursor() genre = request.args.get(‘genre’) if genre: cur.execute(“SELECT * FROM movies WHERE genre LIKE ?”, (f‘%{genre}%’,)) else: cur.execute(“SELECT * FROM movies ORDER BY year DESC”) movies = cur.fetchall() conn.close() return render_template(‘index.html’, movies=movies) @app.route(‘/add’, methods=[‘POST’]) def add_movie(): # 这里可以接收前端传来的电影名,调用scraper.py中的函数 movie_name = request.json.get(‘name’) # 调用采集函数... return jsonify({‘status’: ‘success’}) if __name__ == ‘__main__’: app.run(debug=True)
第四步:创建前端页面
在templates/index.html中,使用Jinja2语法和Bootstrap框架,循环显示movies变量中的电影信息,生成卡片列表。
运行与使用:
-
运行
python app.py启动Web服务器。 -
访问
http://127.0.0.1:5000。 -
通过一个简单的表单或管理后台,输入电影名称,触发采集入库功能。
至此,一个具备采集能力的本地个人影视库就搭建完成了。您可以根据需要,继续添加编辑、删除、评分、标签等功能。这个项目完美融合了影视资源站采集与Web开发,是一个极具成就感的实战练习。
本站所发布的全部内容源于互联网收集整理,仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,版权争议与本站无关。用户必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!
重点提示:
互联网转载资源会有一些其他联系方式,请大家不要盲目相信,被骗本站概不负责! 本网站部分内容只做项目揭秘,无法一对一教学指导,每篇文章内都含项目全套的教程讲解,请仔细阅读。 本站分享的所有平台仅供展示,本站不对平台真实性负责,站长建议大家自己根据项目关键词自己选择平台。 因为文章发布时间和您阅读文章时间存在时间差,所以有些项目红利期可能已经过了,需要自己判断。 本网站仅做资源分享,不做任何收益保障,希望大家可以认真学习。本站所有资料均来自互联网公开分享,并不代表本站立场,如不慎侵犯到您的版权利益,请联系本站删除,将及时处理!
如果遇到付费才可观看的文章,建议升级VIP会员。全站所有资源“VIP会员无限制下载”。
