我接到的要求是,利用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

  1. 登录 TMDB 账号

  2. 点击右上角的 头像 → Settings(设置) → API

  3. 在 API 页面,点击 “Create” 或 “Request an API Key”

  4. 填写申请表:

    • Application Name(应用名称,例如 “My Movie Project”)

    • Application URL(如果没有可填 http://localhost

    • Describe your application(描述应用用途,例如 “用于爬取电影数据分析”)

    • Agree to terms

  5. 提交申请后,你会看到两类 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}")

⚡ 说明

  1. 分页抓取:TMDB 每页 20 条电影,TOTAL_PAGES=500 可以抓到 10000 条左右。

  2. 中文信息language="zh-CN" 会尽量返回中文标题和简介。

  3. 防封策略:加了 time.sleep(0.3),避免短时间大量请求被封 IP。

  4. 保存 CSV:默认编码 utf-8-sig,方便 Excel 打开中文。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐