You need to enable JavaScript to run this app. 爬取Pokemon API构建数据集时请求特定宝可梦ID触发JSONDecodeError报错
优惠活动
大模型
产品
解决方案
定价
更多

爬取Pokemon API构建数据集时请求特定宝可梦ID触发JSONDecodeError报错

爬取PokeAPI构建全量宝可梦数据集的随机解析报错问题

现有爬取实现

为了搭建覆盖全量宝可梦的数据集,编写了基于宝可梦全国图鉴编号区间爬取接口数据的函数,具体代码如下:

import requests
import json
import pandas as pd

def poke_scrape(x, y):
    '''
    输入宝可梦全国图鉴ID区间,调用PokeAPI返回对应信息的pandas数据框
    '''
    # 从API采集数据
    url = 'https://pokeapi.co/api/v2/pokemon/'
    ids = range(x, (y+1))

    pkmn = []
    for id_ in ids:
        url = 'https://pokeapi.co/api/v2/pokemon/' + str(id_)
        pages = requests.get(url).json()
        # content = json.dumps(pages, indent = 4, sort_keys=True)
        if 'error' not in pages:
            pkmn.append([pages['id'], pages['name'], pages['abilities'], pages['stats'], pages['types']])
    
    # 将采集到的API数据转换为结构化数据框
    cols = ['id', 'name', 'abilities', 'stats', 'types']
    df = pd.DataFrame(pkmn, columns=cols)

运行过程中遇到的异常

  • 函数对绝大多数宝可梦ID的请求都可以正常运行,顺利输出符合预期的结构化数据
  • 执行poke_scrape(229, 229)(仅请求229号宝可梦)时,曾抛出JSONDecodeError: Expecting value: line 1 column 1 (char 0)的解析报错
  • 报错没有固定的触发对应ID:同一个宝可梦ID此前曾被成功加载,采集过程中还随机出现过其他ID触发同类报错
  • 已经尝试将接口响应的解析方式,从requests自带的.json()方法替换为json.loads()手动解析,没有解决问题
  • 原本如果是固定ID对应的永久性接口失效,还可以手动录入对应宝可梦的属性信息补齐数据缺口,但目前这类报错没有固定对应关系,无法提前定位和补全,需要帮忙分析问题诱因与可行的解决方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 00:15:03