我通过调用关于电影的OMDB API来检索JSON。我试图将JSON添加到另一个从here抓取信息的字典。
具有抓取信息的Dict具有以下结构:
{
'movie_title': [],
'review_text': [],
'review_url': [],
'reviewed_by': [],
'score': []
}
我通过循环来自OMDB API的响应,动态地将键添加到字典中,将值作为空列表,如下所示
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 DataFrame中,但我收到了错误
ValueError('arrays must all be same length')
这是因为OMDB响应中的一些属性,如语言'网站'某些电影存在,而不是其他电影。
我已经尝试了
movie_df = pd.DataFrame(movie_review_dict)
movie_df = pd.DataFrame.from_dict(movie_details)
我遇到了同样的错误。
答案 0 :(得分:1)
您可以尝试使用answer
附加到空数据框df = pd.DataFrame()
df = df.append(movie_review_dict, ignore_index=False)