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

如何解决爬虫代码中的TypeError: list indices must be integers or slices, not str错误

解决TypeError: list indices must be integers or slices, not str问题

你遇到的错误根源是循环里误用了players['id']和players['displayname']——players是API返回的列表类型,列表只能用整数索引(比如players[0])访问元素,不能用字符串键取值。而且这两行代码完全多余,你后面已经用player.get("id")正确实现了单个球员属性的获取。

修正后的代码如下:

import requests
import pandas as pd

def fetch_json(api_link, timeout=10):
    try:
        response = requests.get(api_link, timeout=timeout)
        if response.status_code == 200:
            return response.json()
        else:
            print(f"Failed to fetch data from API for link: {api_link}")
            return None
    except requests.exceptions.Timeout:
        print(f"Timeout occurred while fetching data for link: {api_link}. Skipping...")
        return None
    except requests.exceptions.RequestException as e:
        print(f"Error occurred while fetching data for link {api_link}: {e}")
        return None

api_link = "https://apiv2.cricket.com.au/web/players/list?isActive=1&teamId=&jsconfig=eccn%3Atrue&format=json"

player_data= fetch_json(api_link)

name = []

if player_data:
    players = player_data['players']
    for player in players:
        name.append({
            "id" : player.get("id"),
            "displayname" : player.get("displayname")
        })
    print(f"Player Name Retrieved")
    
player_name = pd.DataFrame(name)
# 可选:打印前几行验证结果
print(player_name.head())

核心修改说明:

  • 删除了id = "".join(players['id'])和displayname = "".join(players['displayname'])这两行错误代码,它们试图用字符串键访问列表,直接触发了TypeError。
  • 保留player.get("id")和player.get("displayname"),因为player是循环中单个的字典对象,支持用字符串键提取属性。

修改后程序即可正常遍历球员列表,提取目标字段并生成DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:18:16