0

您好我正在尝试使用 IMDbPY 库创建数据库。但是当我尝试使用 get('cast') 获取名称时。我该如何解决?代码如下:

from imdb import IMDb
ia = IMDb()
def getmovieID( movie_name ):
    movie = ia.search_movie(movie_name)[0] # a Movie instance.
    get_movie = ia.get_movie(movie.movieID)
    return get_movie

def getcast(movie_name):
    movie = getmovieID(movie_name)
    casts = []
    cast = movie.get('casts')
    for a in cast['name']:
        casts.append(a)
    return casts

print(getcast('The Dark Knight'))

它说:文件“C:.../Python/imdbtest.py”,第 17 行,在 getcast 中为 a in cast['name']:

TypeError:字符串索引必须是整数

4

2 回答 2

0

您必须考虑这movie.get('casts')将返回一个 Person 对象列表,而不是带有 'name' 键的字典。

我注意到的另一件(次要)事情是您获得了第一个结果的 movieID,然后再次获取该电影。这可以使用该ia.update方法省略。

一个可行的例子(仍然假设很多事情,比如搜索会给你至少一个结果):

#!/usr/bin/env python3

import sys

from imdb import IMDb
ia = IMDb()

def getmovieID(movie_name):
    movie = ia.search_movie(movie_name)[0] # a Movie instance.
    ia.update(movie)
    return movie

def getcast(movie_name):
    movie = getmovieID(movie_name)
    casts = []
    for person in movie.get('cast', []):
        casts.append(person['name'])
    return casts

print(getcast('The Dark Knight'))
于 2020-05-16T08:50:24.190 回答
0

重构你的代码。

from imdb import IMDb
ia = IMDb()


def getmovieID(movie_name):
    movie = ia.search_movie(movie_name)[0]
    get_movie = ia.get_movie(movie.movieID)
    return get_movie


def getcast(movie_name):
    movie = getmovieID(movie_name)
    casts_objects = movie.get('cast')
    casts = []
    for person in casts_objects:
        casts.append(person.get('name'))
    return casts

print(getcast('The Dark Knight'))
于 2020-05-16T09:05:45.107 回答