如何解决爬虫代码中的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
相关产品推荐
相关产品推荐

