如何处理Google Books API响应缺失字段?保留数据并填充NaN
解决Google Books API字段缺失问题
你当前的代码将所有字段提取逻辑放在单个try块中,一旦某个字段缺失触发KeyError,就会执行continue跳过整个图书的信息收集,导致已获取的字段也无法保留。要实现**保留可获取信息、缺失字段填充np.nan**的需求,需要逐个字段处理缺失情况,推荐使用字典的get()方法(更简洁高效),或者给每个字段单独设置try-except。
修改后的代码
import requests import pandas as pd import numpy as np # 替换为你的ISBN列表 isbn_list = ['8180315339', '938733077X'] results = [] for isbn in isbn_list: # 发起API请求 response = requests.get(f"https://www.googleapis.com/books/v1/volumes?q=isbn:{isbn}") data = response.json() # 处理无匹配结果的ISBN if 'items' not in data: results.append({ 'Title': np.nan, 'Sub Title': np.nan, 'Authors': np.nan, 'Publisher': np.nan, 'Published Date': np.nan, 'Description': np.nan, 'Page Count': np.nan, 'Category': np.nan, 'imageS': np.nan, 'imageM': np.nan, 'Language': np.nan, 'Text': np.nan }) continue for item in data['items']: volume_info = item.get('volumeInfo', {}) search_info = item.get('searchInfo', {}) # 逐个提取字段,缺失则填充np.nan book_data = { 'Title': volume_info.get('title', np.nan), 'Sub Title': volume_info.get('subtitle', np.nan), 'Authors': volume_info.get('authors', np.nan), 'Publisher': volume_info.get('publisher', np.nan), 'Published Date': volume_info.get('publishedDate', np.nan), 'Description': volume_info.get('description', np.nan), 'Page Count': volume_info.get('pageCount', np.nan), 'Category': volume_info.get('categories', np.nan), 'imageS': volume_info.get('imageLinks', {}).get('smallThumbnail', np.nan), 'imageM': volume_info.get('imageLinks', {}).get('thumbnail', np.nan), 'Language': volume_info.get('language', np.nan), 'Text': search_info.get('textSnippet', np.nan) } results.append(book_data) # 生成DataFrame df_ = pd.DataFrame(results) print(df_)
关键说明
- 字典
get()方法:dict.get(key, default)会优先返回key对应的值,若key不存在则返回指定的默认值(这里用np.nan),避免触发KeyError。 - 嵌套字段处理:对于
imageLinks这类可能不存在的嵌套字段,先通过volume_info.get('imageLinks', {})返回空字典,再对空字典调用get(),确保不会报错。 - 无结果处理:当API返回的JSON中没有
items字段时,直接添加一条全为np.nan的记录,避免后续遍历报错。 - 字典存储数据:用字典存储单条图书信息,相比元组更清晰,也不用担心字段顺序错误。
内容的提问来源于stack exchange,提问作者mystical_starseed
相关产品推荐
相关产品推荐

