【问题标题】:JSONDecodeError: Expecting value: line 1 column 1 (char 0) while getting data from Pokemon APIJSONDecodeError:期望值:从 Pokemon API 获取数据时的第 1 行第 1 列(字符 0)
【发布时间】:2021-03-16 00:29:30
【问题描述】:

我正在尝试抓取 pokemon API 并为所有 pokemon 创建一个数据集。所以我写了一个看起来像这样的函数:

import requests
import json
import pandas as pd

def poke_scrape(x, y):
    '''
    A function that takes in a range of pokemon (based on pokedex ID) and returns 
    a pandas dataframe with information related to the pokemon using the Poke API
    '''
    #GATERING THE DATA FROM 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']])
    
    #MAKING A DATAFRAME FROM GATHERED API DATA
    cols = ['id', 'name', 'abilities', 'stats', 'types']
    df = pd.DataFrame(pkmn, columns=cols)

该代码适用于大多数口袋妖怪。但是,当我尝试运行poke_scrape(229, 229)(因此尝试仅加载第 229 个口袋妖怪)时,它给了我 JSONDecodeError。它看起来像这样:

到目前为止,我已经尝试使用 json.loads() 代替,但这并没有解决问题。更令人困惑的是,之前已经加载了特定的 pokemon,而另一个 ID 也出现了同样的问题 - 否则我可以手动输入无法加载到我的数据帧中的特定 pokemon 的统计信息。任何帮助表示赞赏!

【问题讨论】:

    标签: json api web-scraping python-requests


    【解决方案1】:

    由于 PokeAPI 的工作方式,一些指向每个 pokemon 的 JSON 数据的链接仅在链接以 '/' 结尾时才会加载(例如 https://pokeapi.co/api/v2/pokemon/229/ 与 https://pokeapi.co/api/v2/pokemon/229 - 第一个链接有效,第二个链接有效未找到返回)。但是,由于添加了'/',其他人会以响应错误进行响应,因此在函数开头的for循环之后使用一些if语句解决了这个问题

    【讨论】:

      猜你喜欢
      • 2013-05-10
      • 2019-02-25
      • 2018-06-28
      • 2018-08-28
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      • 2019-07-04
      相关资源
      最近更新 更多