将字典中具有不同长度列表的字典转换为DataFram

2024-09-27 02:14:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过调用omdbapi来检索一个关于电影的JSON。我正在尝试将JSON添加到另一个字典中,该字典正在从here中获取信息。你知道吗

包含刮取信息的Dict具有以下结构:

{
         'movie_title': [],
         'review_text': [],
         'review_url': [],
         'reviewed_by': [],
         'score': []
}

我通过循环omdbapi的响应,将值作为空列表动态添加到字典中,如下所示

api_key = ''
ombd_data = requests.get('http://www.omdbapi.com/?apikey=api_key'+'&t=Basmati+Blues&plot=full'
omdb_json = json.loads(omdb_data).content
for curr_key in omdb_json.keys():
    movie_review_dict[curr_key] = []

dict现在有了结构

{
     u'Actors': [],
     u'Awards': [],
     u'BoxOffice': [],
     u'Country': [],
     u'DVD': [],
     u'Director': [],
     u'Genre': [],
     u'Language': [],
     u'Metascore': [],
     u'Plot': [],
     u'Poster': [],
     u'Production': [],
     u'Rated': [],
     u'Ratings': [],
     u'Released': [],
     u'Response': [],
     u'Runtime': [],
     u'Title': [],
     u'Type': [],
     u'Website': [],
     u'Writer': [],
     u'Year': [],
     u'imdbID': [],
     u'imdbRating': [],
     u'imdbVotes': [],
     'movie_title': [],
     'review_text': [],
     'review_url': [],
     'reviewed_by': [],
     'score': []
}

我有一个函数,它读取这个URL,使用BeautifulSoup模块并向dict添加元素,同时还从OMBD响应中添加数据。你知道吗

def read_html_page(home_page='http://www.rogerebert.com/reviews'):
    movie_details = movie_review_dict
    result = requests.get(url=home_page)
    soup_obj = BeautifulSoup(result_content, 'html5lib')
    wrapper_class = soup_obj.find('div', id='review-list')
    for curr_movie_dom in wrapper_class.find_all('figure'):
        movie_title = curr_movie_dom.find('h5', class_='title').a.get_text()
        movie_critic = curr_movie_dom.find('p', class_='byline').get_text().strip()  
        omdb_dict = get_omdb_data(movie_title=movie_title)
        for curr_key in omdb_dict.keys():
            if curr_key in movie_details:
                movie_details[curr_key].append(omdb_dict[curr_key])
            else:
                movie_details[curr_key] = []
                movie_details[curr_key].append(omdb_dict[curr_key])
    return movie_details

我试图将dict存储到pandas数据帧中,但出现了错误

ValueError('arrays must all be same length')

这是因为OMDB响应中的一些属性,比如“Languages”、“Website”存在于某些电影中,而不存在于其他电影中。你知道吗

我试过了

movie_df = pd.DataFrame(movie_review_dict)
movie_df = pd.DataFrame.from_dict(movie_details)

我也遇到了同样的错误。你知道吗


Tags: keytextinget电影titlefindmovie

热门问题