You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理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_)

关键说明

  1. 字典get()方法:dict.get(key, default)会优先返回key对应的值,若key不存在则返回指定的默认值(这里用np.nan),避免触发KeyError。
  2. 嵌套字段处理:对于imageLinks这类可能不存在的嵌套字段,先通过volume_info.get('imageLinks', {})返回空字典,再对空字典调用get(),确保不会报错。
  3. 无结果处理:当API返回的JSON中没有items字段时,直接添加一条全为np.nan的记录,避免后续遍历报错。
  4. 字典存储数据:用字典存储单条图书信息,相比元组更清晰,也不用担心字段顺序错误。

内容的提问来源于stack exchange,提问作者mystical_starseed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 04:35:50