films-data-api:基于Python的电影数据JSON API应用

需积分: 19 0 下载量 39 浏览量 更新于2024-12-26 收藏 11KB ZIP 举报
资源摘要信息:"films-data-api:电影数据JSON API" 1. 关键知识点: App Engine 应用程序 - App Engine 是谷歌提供的一个全托管的平台,用于开发和托管网络应用程序。开发者可以使用Google App Engine来构建和部署应用程序,而无需担心服务器的配置和维护。它支持多种编程语言,包括Python、Java、PHP等。 - 本API是一个运行在Google App Engine上的应用程序,这意味着它可以利用App Engine的可扩展性和易于管理的特性。 2. 关键知识点: 数据索引与搜索 - 索引是数据库管理系统中的一种结构,可以优化数据检索。在本API中,使用了索引来对来自Freebase API的电影数据进行有效管理。 - App Engine提供了一个搜索API,允许应用程序索引和搜索数据。这使得API能够提供快速且相关的搜索结果。 3. 关键知识点: 自动完成功能 - 自动完成功能通常用于搜索框或输入字段中,用于预测用户想要输入的词汇。在电影数据API中,实现了自动完成功能,以帮助用户更快地找到他们想要查询的电影。 - 实现这一功能需要对电影标题进行标记化处理,这样即使用户输入的部分查询也能找到匹配的结果。 4. 关键知识点: 数据排序 - 数据排序是按照特定的顺序重新排列数据集合的过程。在本API中,搜索结果首先根据电影的总收入进行排序,如果没有总收入信息,则根据电影的发布日期排序。 - 排序对于提供给用户的搜索结果来说至关重要,因为它可以提升用户体验,使用户可以快速找到最相关的搜索结果。 5. 关键知识点: JSON 数据格式 - JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。 - 本API返回的结果使用JSON格式,这意味着数据可以被各种编程语言的客户端轻松地解析和使用。 6. 关键知识点: Freebase API - Freebase是一个大型的、协作构建的数据库,其中包含了大量的公共领域信息,由用户提交并共享。Freebase覆盖了广泛的领域,包括电影、音乐、体育、游戏等多个主题。 - 本API使用了Freebase API来获取电影数据,表明它能访问这个庞大的电影数据库,并提供给用户。 7. 关键知识点: Python 编程语言 - Python是一种广泛使用的高级编程语言,以其易读性和简洁的语法而闻名。它支持多种编程范式,包括面向对象、命令式、函数式和过程式编程。 - 标签中提到Python,意味着此API的后端开发可能使用了Python语言。Python在数据分析、网络开发和自动化脚本等领域非常受欢迎。 8. 关键知识点: 文件名称列表 - 文件名称列表中的"films-data-api-master"表明这是该API项目的主目录或主分支。通常,在版本控制系统中,如Git,"master"分支是项目的主线开发分支,包含了最新的稳定代码。 总结以上知识点,本API是一个由Python编写的、运行在Google App Engine平台上的电影数据服务。它利用Freebase API来索引电影信息,并通过App Engine提供的搜索功能实现对电影的搜索和自动完成功能。API输出的结果采用JSON格式,并且结果会根据电影的总收入和发布日期进行排序,以提供更好的用户体验。

import requests from bs4 import BeautifulSoup import openpyxl def get_movie_data(year): url = f'https://maoyan.com/films?year={year}' headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get(url, headers=headers) if response.status_code == 200: soup = BeautifulSoup(response.content, 'html.parser') movies = soup.select('.movie-item-title') movie_data = [] for movie in movies: movie_link = 'https://maoyan.com' + movie.a['href'] movie_data.append(get_movie_details(movie_link)) return movie_data else: print(f"Failed to fetch data for year {year}") return [] def get_movie_details(url): headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get(url, headers=headers) if response.status_code == 200: soup = BeautifulSoup(response.content, 'html.parser') movie_name = soup.select_one('h1.name').text.strip() release_date = soup.select_one('.info-release').text.strip() genre = soup.select_one('.info-category').text.strip() director = soup.select_one('.info-director').text.strip() actors = [actor.text.strip() for actor in soup.select('.info-actor a')] maoyan_score = soup.select_one('.score-num').text.strip() box_office = soup.select_one('.info-num').text.strip() return { '电影名称': movie_name, '上映日期': release_date, '影片类型': genre, '导演': director, '演员': ', '.join(actors), '猫眼口碑': maoyan_score, '累计票房': box_office } else: print(f"Failed to fetch details for {url}") return {} def save_to_excel(data, filename): wb = openpyxl.Workbook() ws = wb.active headers = ['电影名称', '上映日期', '影片类型', '导演', '演员', '猫眼口碑', '累计票房'] ws.append(headers) for movie in data: row_data = [movie.get(header, '') for header in headers] ws.append(row_data) wb.save(filename) print(f"Data saved to {filename}") if __name__ == '__main__': years = range(2017, 2021) all_movie_data = [] for year in years: movie_data = get_movie_data(year) all_movie_data.extend(movie_data) save_to_excel(all_movie_data, 'maoyan_movies_2017_to_2020.xlsx')

2023-07-22 上传