Python爬取电影数据
我接到的要求是,利用python爬取一万条电影数据,包括电影名称,上映时间,主演等信息。
查阅相关资料显示对豆瓣电影和猫眼电影都有很强的反爬机制,因此选用的是TMDB (The Movie Database)网站数据。
不过前提是需要TMDB的API KEY(API秘钥),才能爬取所需的数据信息。
1️⃣ 注册 TMDB 账号
-
打开官网:https://www.themoviedb.org/
-
点击右上角的 “Login” → “Sign Up”(登录 → 注册)
-
填写注册信息:
-
Username(用户名)
-
Email Address(邮箱)
-
Password(密码)
-
Birthday(生日)
-
-
勾选同意 服务条款与隐私政策
-
点击 “Sign Up” 完成注册
-
前往你的邮箱,点击 激活链接 验证邮箱
2️⃣ 登录并申请 API Key
-
登录 TMDB 账号
-
点击右上角的 头像 → Settings(设置) → API
-
在 API 页面,点击 “Create” 或 “Request an API Key”
-
填写申请表:
-
Application Name(应用名称,例如 “My Movie Project”)
-
Application URL(如果没有可填
http://localhost) -
Describe your application(描述应用用途,例如 “用于爬取电影数据分析”)
-
Agree to terms
-
-
提交申请后,你会看到两类 Key:
-
Read Access Token (v4 auth)
-
API Key (v3 auth)
-
通常爬取或调用数据,只需要 API Key (v3 auth)。
3️⃣ 测试 API Key
可以在浏览器访问,例如:https://api.themoviedb.org/3/movie/550?api_key=你的API_KEY
如果返回 JSON 数据,说明 Key 已可用。
import requests
import pandas as pd
import time
# ========== 配置 ==========
API_KEY = "你的API_KEY" # 替换成你的 TMDB API Key
BASE_URL = "https://api.themoviedb.org/3"
OUTPUT_CSV = "tmdb_movies.csv"
# 需要抓取的总页数(每页约 20 条电影)
TOTAL_PAGES = 500 # 500页 × 20 ≈ 10000条数据
# ========== 定义函数 ==========
def fetch_movies(page=1):
"""
获取 TMDB 电影列表
"""
url = f"{BASE_URL}/movie/popular"
params = {
"api_key": API_KEY,
"language": "zh-CN", # 中文信息
"page": page
}
response = requests.get(url, params=params)
if response.status_code == 200:
return response.json().get("results", [])
else:
print(f"请求失败: {response.status_code}")
return []
def parse_movie(movie):
"""
提取电影关键信息
"""
return {
"id": movie.get("id"),
"title": movie.get("title"),
"original_title": movie.get("original_title"),
"release_date": movie.get("release_date"),
"vote_average": movie.get("vote_average"),
"vote_count": movie.get("vote_count"),
"popularity": movie.get("popularity"),
"overview": movie.get("overview"),
"original_language": movie.get("original_language")
}
# ========== 主抓取流程 ==========
all_movies = []
for page in range(1, TOTAL_PAGES + 1):
print(f"抓取第 {page} 页...")
movies = fetch_movies(page)
if not movies:
break
all_movies.extend([parse_movie(m) for m in movies])
time.sleep(0.3) # 避免请求过快被封
# 保存到 CSV
df = pd.DataFrame(all_movies)
df.to_csv(OUTPUT_CSV, index=False, encoding="utf-8-sig")
print(f"完成!总共抓取 {len(all_movies)} 条电影数据,已保存到 {OUTPUT_CSV}")
⚡ 说明
-
分页抓取:TMDB 每页 20 条电影,
TOTAL_PAGES=500可以抓到 10000 条左右。 -
中文信息:
language="zh-CN"会尽量返回中文标题和简介。 -
防封策略:加了
time.sleep(0.3),避免短时间大量请求被封 IP。 -
保存 CSV:默认编码
utf-8-sig,方便 Excel 打开中文。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)