Гид по технологиям

Извлечение данных IMDb с помощью Python и библиотеки Cinemagoer

5 min read Аналитика данных Обновлено 24 Dec 2025
Извлечение данных IMDb с Python
Извлечение данных IMDb с Python

Логотип Python на фоне серверной стойки с множеством монтажных блоков и компьютеров.jpg?w=1600&h=900&fit=crop)

О чём эта статья

  • Как быстро начать работу с Cinemagoer
  • Примеры поиска фильмов, людей и компаний
  • Как получить детали по IMDb ID
  • Практический плейбук для массового сбора данных
  • Альтернативы и ограничения

Введение

The Internet Movie Database (IMDb) — крупнейшая онлайн-база данных о фильмах, сериалах, видеоиграх и потоковом контенте. Она содержит миллионы записей, пригодных для анализа. Cinemagoer (ранее IMDbPY) — это библиотека на Python для доступа и управления данными IMDb: фильмы, люди, компании и другая метаинформация.

Important: библиотека использует сетевые запросы к сервисам IMDb. Соблюдайте правила использования сайтов и учитывайте возможные ограничения по частоте запросов.

Установка необходимых библиотек

Установите Cinemagoer через pip. В командной строке запустите:

pip install cinemagoer

Убедитесь, что у вас установлен pip и актуальная версия Python (рекомендуется 3.7+). Репозиторий с примерами обычно доступен на GitHub и распространяется под MIT-лицензией.

Извлечение данных IMDb с помощью Python

Импортируйте библиотеку и создайте экземпляр клиента:

from imdb import Cinemagoer

ia = Cinemagoer()

Этот объект ia используется для всех последующих запросов.

Поиск фильмов

Метод search_movie() ищет фильмы по названию или похожему названию:

from imdb import Cinemagoer

ia = Cinemagoer()

# Поиск фильмов, у которых в названии есть 'rock'
movies = ia.search_movie('rock')
print(movies[0])

Результат поиска фильмов в терминале с именем и ID

Получение фильма по IMDb ID и доступ к метаданным

По ID можно запросить полный объект фильма и извлечь режиссёров, жанры и другие поля:

from imdb import Cinemagoer

ia = Cinemagoer()

# Пример: получение фильма по IMDb ID
movie = ia.get_movie('0468569')
print(movie)

# Имена режиссёров
print('Directors:')
for director in movie['directors']:
    print(director['name'])

# Жанры
print('Genres:')
for genre in movie.get('genres', []):
    print(genre)

Пример вывода: данные фильма, режиссёры и жанры

Примечание: словарь movie содержит разные ключи (title, year, directors, genres, cast и т.д.). Всегда проверяйте наличие ключа через movie.get(‘ключ’, значениепоумолчанию).

Поиск людей

Метод search_person() ищет персон по имени:

from imdb import Cinemagoer

ia = Cinemagoer()

persons = ia.search_person('Heath')
print(persons[0])

Вывод в терминале с результатом поиска человека по имени

Поиск компаний

Метод search_company() ищет компании по названию:

from imdb import Cinemagoer

ia = Cinemagoer()

companies = ia.search_company('Universal')
print(companies)

Вы получите список компаний, совпадающих по названию.

Получение данных по ID для людей и компаний

from imdb import Cinemagoer

ia = Cinemagoer()

# Данные о человеке по ID
person = ia.get_person('0005132')
print(person['name'])
print(person.get('birth date'))

# Данные о компании по ID
company = ia.get_company('0005073')
print(company['name'])

Пример вывода: детали человека и компании

Топ и дно фильмов

Можно получить списки top250 и bottom100:

from imdb import Cinemagoer

ia = Cinemagoer()

top = ia.get_top250_movies()
print(top[0])

bottom = ia.get_bottom100_movies()
print(bottom[0])

Изображение, показывающее результат top250 и bottom100

Дополнительно: доступны get_top250_tv(), get_popular100_movies(), get_top250_indian_movies() и другие методы для специальных списков.

Мини-методология: от задачи до анализа

  1. Определите цель анализа — что вы хотите узнать (рейтинги, жанры, связи актёр — режиссёр).
  2. Составьте список фильмов или людей (по списку/по ключевым словам/по ID).
  3. Соберите метаданные через Cinemagoer, сохраняя исходные JSON-объекты.
  4. Приведите данные к единому формату: даты, числовые поля, списки.
  5. Произведите очистку: удалите дубли, нормализуйте имена, обработайте пропуски.
  6. Выполните анализ: агрегации, сети (graph), временные ряды.
  7. Документируйте выводы и сохраняйте репродуцируемый скрипт.

Краткое определение: метаданные — структурированные сведения о фильме (название, год, режиссёр, жанры, рейтинг и т. д.).

Плейбук: массовый сбор данных (SOP)

  1. Подготовьте CSV/JSON со списком IMDb ID.
  2. Настройте ретраи и задержки между запросами (rate limiting). Пример: 0.5—1 с между запросами.
  3. Для каждого ID:
    • вызов ia.get_movie(id)
    • записать полученный объект в файл (строка JSON)
    • логировать ошибки и повторять с экспоненциальной задержкой
  4. По завершении — объединить файлы, выполнить дедупликацию и валидацию полей.

Пример простого цикла с задержкой:

import time
from imdb import Cinemagoer

ia = Cinemagoer()
ids = ['0468569', '0111161', ...]

for mid in ids:
    try:
        movie = ia.get_movie(mid)
        # сохранить movie как JSON
    except Exception as e:
        # логировать и повторить при необходимости
        pass
    time.sleep(0.8)

Важно: используйте разумные задержки и кеширование. Массовые запросы без контроля могут привести к блокировкам.

Когда Cinemagoer не подходит (контрпример)

  • Если вам нужен стабильно структурированный и официальный дамп данных без сетевых запросов — IMDb выпускает наборы данных (datasets) для загрузки.
  • Если требуется коммерческое API с SLA — рассмотрите платные сервисы типа OMDb (имеет API-ключ) или официальные партнёрские решения.
  • Для реального времени и высоких объёмов запросов лучше подготовить внутренний кеш/реплику данных.

Альтернативные подходы

  • IMDb datasets: наборы данных для скачивания и локального анализа.
  • OMDb API: простой REST API (требует ключа для больших объёмов).
  • Веб-скрейпинг: рискованно и требует уважения к robots.txt и условиям использования.

Чек-листы по ролям

  • Data Scientist:

    • Проверить полноту полей (rating, votes, genres).
    • Нормализовать имена и годы.
    • Построить гипотезы и метрики.
  • Data Engineer:

    • Настроить пайплайн (очистка, дедупликация, хранение).
    • Реализовать ретраи и лимит запросов.
    • Оркестрация задач (Airflow / cron).
  • Разработчик:

    • Интегрировать ответы API в приложение.
    • Обрабатывать ошибки сети и таймауты.

Критерии приёмки

  • Скрипт собирает >90% заданных ID без необработанных исключений.
  • Данные валидированы по ключевым полям: title, year, id.
  • Логирование ошибок и метрик (кол-во запросов, ошибки, время).

Тестовые случаи / Критерии тестирования

  • Позитивный: получение фильма по корректному ID возвращает title и year.
  • Негативный: несуществующий ID должен возвращать исключение или None, которое обрабатывается.
  • Нагрузочный: 100 последовательных запросов с задержкой 0.8 с — нет блокировок и накопления исключений.

Безопасность и конфиденциальность

  • Не выкладывайте в общий доступ ваши ключи (если используете платные API).
  • Соблюдайте условия использования IMDb и законы о сборе данных.

Быстрая таблица методов (факт-бокс)

  • search_movie(title)
  • get_movie(imdb_id)
  • search_person(name)
  • get_person(person_id)
  • search_company(name)
  • get_company(company_id)
  • get_top250_movies(), get_bottom100_movies()

Рекомендации по масштабированию

  • Используйте потоковую запись (append) в файлы JSONL.
  • Храните «сырые» объекты для повторной обработки.
  • Внедрите кеш уровня API для часто запрашиваемых ID.

Короткое резюме

Cinemagoer — удобный инструмент для быстрого прототипирования при работе с данными IMDb. Он упрощает получение метаданных о фильмах, людях и компаниях. Для больших объёмов данных планируйте кеширование, соблюдайте лимиты и рассматривайте альтернативные источники при необходимости.

Summary:

  • Начните с pip install cinemagoer.
  • Используйте ia.get_movie(id) для полной информации по фильму.
  • Обрабатывайте ошибки и добавляйте задержки при массовых запросах.

Notes:

  • Для официальных и больших датасетов рассмотрите IMDb datasets или коммерческие API.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как увидеть местоположение в Snapchat
Социальные сети

Как увидеть местоположение в Snapchat

Обновить сетевые драйверы Intel на Windows
Техподдержка

Обновить сетевые драйверы Intel на Windows

Ubuntu 23.04: сделать интерфейс как в macOS
Linux

Ubuntu 23.04: сделать интерфейс как в macOS

Создать и перейти в папку одной командой в Linux
Linux

Создать и перейти в папку одной командой в Linux

Удалённый доступ к Home Assistant через Tailscale
Умный дом

Удалённый доступ к Home Assistant через Tailscale

Как уменьшить размер файла Word
Microsoft Word

Как уменьшить размер файла Word