Извлечение данных IMDb с помощью Python и библиотеки Cinemagoer
.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])Получение фильма по 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])Дополнительно: доступны get_top250_tv(), get_popular100_movies(), get_top250_indian_movies() и другие методы для специальных списков.
Мини-методология: от задачи до анализа
- Определите цель анализа — что вы хотите узнать (рейтинги, жанры, связи актёр — режиссёр).
- Составьте список фильмов или людей (по списку/по ключевым словам/по ID).
- Соберите метаданные через Cinemagoer, сохраняя исходные JSON-объекты.
- Приведите данные к единому формату: даты, числовые поля, списки.
- Произведите очистку: удалите дубли, нормализуйте имена, обработайте пропуски.
- Выполните анализ: агрегации, сети (graph), временные ряды.
- Документируйте выводы и сохраняйте репродуцируемый скрипт.
Краткое определение: метаданные — структурированные сведения о фильме (название, год, режиссёр, жанры, рейтинг и т. д.).
Плейбук: массовый сбор данных (SOP)
- Подготовьте CSV/JSON со списком IMDb ID.
- Настройте ретраи и задержки между запросами (rate limiting). Пример: 0.5—1 с между запросами.
- Для каждого ID:
- вызов ia.get_movie(id)
- записать полученный объект в файл (строка JSON)
- логировать ошибки и повторять с экспоненциальной задержкой
- По завершении — объединить файлы, выполнить дедупликацию и валидацию полей.
Пример простого цикла с задержкой:
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.
Похожие материалы
Как увидеть местоположение в Snapchat
Обновить сетевые драйверы Intel на Windows
Ubuntu 23.04: сделать интерфейс как в macOS
Создать и перейти в папку одной командой в Linux
Удалённый доступ к Home Assistant через Tailscale