爬取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
相关产品推荐
相关产品推荐

