
在 python 项目中,我们经常需要从外部服务获取数据,例如随机词汇。requests 库是进行 http 请求的标准工具。以下是一个使用 requests 库从 random-word-api.herokuapp.com 获取单个随机词汇的基本示例:
import requests
import random
def fetch_random_word():
"""
从 API 获取一个随机词汇。
"""
try:
url = "https://random-word-api.herokuapp.com/word?number=1"
response = requests.get(url)
response.raise_for_status() # 检查 HTTP 错误
words = response.json()
if words:
random_word = random.choice(words)
print(f"获取到的随机词汇: {random_word}")
return random_word
else:
print("API 返回空列表。")
return None
except requests.exceptions.RequestException as e:
print(f"请求 API 时发生错误: {e}")
return None
except ValueError:
print("API 返回内容不是有效的 JSON。")
return None
if __name__ == "__main__":
fetch_random_word()此代码段能够成功连接到 API 并返回一个随机词汇,例如 "example" 或 "python"。response.raise_for_status() 是一个良好的实践,用于自动检查请求是否成功(状态码在 200-299 之间),如果不是,则抛出 HTTPError 异常。
许多应用程序场景要求获取特定类别的随机词汇,例如“水果”或“颜色”。直观地,我们可能会尝试在 API 请求的 URL 中添加一个查询参数来指定类别。例如,尝试获取一个随机的水果名称:
import requests
import random
def fetch_categorized_word(category):
"""
尝试从 API 获取指定类别的随机词汇。
"""
try:
url = f"https://random-word-api.herokuapp.com/word?number=1&category={category}"
print(f"尝试请求 URL: {url}")
response = requests.get(url)
response.raise_for_status()
words = response.json()
if words:
random_word = random.choice(words)
print(f"获取到的 '{category}' 类别词汇: {random_word}")
return random_word
else:
print(f"API 返回空列表,可能不支持 '{category}' 类别或无匹配词汇。")
return None
except requests.exceptions.RequestException as e:
print(f"请求 API 时发生错误: {e}")
return None
except ValueError:
print("API 返回内容不是有效的 JSON。")
return None
if __name__ == "__main__":
fetch_categorized_word("fruits")
fetch_categorized_word("colors")当我们运行上述代码并尝试获取“fruits”或“colors”类别的词汇时,可能会遇到如下错误信息:请求 API 时发生错误: 404 Client Error: Not Found for url: ...。这表明 API 服务器未能找到与请求匹配的资源,或者更具体地说,它不识别或不支持 category 参数。
遇到上述问题时,首要且最关键的步骤是查阅所使用 API 的官方文档。API 文档是了解其功能、可用端点、支持的查询参数以及响应格式的唯一权威来源。
立即学习“Python免费学习笔记(深入)”;
对于 random-word-api.herokuapp.com,其官方文档(例如:https://random-word-api.herokuapp.com/home)明确指出,该 API 不提供按类别筛选词汇的功能。它只支持获取指定数量的随机词汇,而没有 category 参数。
这意味着,无论我们如何尝试在 URL 中添加 category=fruits,API 都不会理解这个参数,从而导致请求失败或返回非预期结果。
既然当前 API 不支持按类别筛选,我们需要考虑以下解决方案:
最直接的解决方案是寻找一个提供所需功能的其他随机词汇 API。在选择新的 API 时,请务必:
例如,可以搜索 "random word API with categories" 或 "categorized word list API" 来寻找合适的替代品。
如果找不到合适的第三方 API,或者出于性能、隐私或离线访问等考虑,可以采取以下策略:
本地词汇列表: 维护一个本地的词汇列表,以字典或 JSON 文件的形式存储,其中键是类别,值是该类别下的词汇列表。
import random
local_words = {
"fruits": ["Apple", "Banana", "Cherry", "Date", "Elderberry"],
"colors": ["Red", "Blue", "Green", "Yellow", "Purple"],
"animals": ["Lion", "Tiger", "Bear", "Wolf", "Fox"]
}
def get_local_categorized_word(category):
"""
从本地数据获取指定类别的随机词汇。
"""
words_in_category = local_words.get(category.lower())
if words_in_category:
return random.choice(words_in_category)
else:
print(f"本地数据中没有 '{category}' 类别。")
return None
if __name__ == "__main__":
print(f"本地水果: {get_local_categorized_word('fruits')}")
print(f"本地颜色: {get_local_categorized_word('colors')}")
print(f"本地动物: {get_local_categorized_word('animals')}")
print(f"本地未知类别: {get_local_categorized_word('vegetables')}")大型数据集筛选: 如果能获取一个包含大量词汇和对应类别标签的综合数据集(例如 CSV 或 JSON 文件),可以将其加载到内存中,然后根据类别进行筛选。这通常适用于数据量较大但不需要实时从网络获取的场景。
在使用 Python requests 模块与外部 API 交互时,理解 API 的功能和限制至关重要。当尝试实现特定功能(如按类别筛选)但遇到意外行为时,第一步且最重要的一步是查阅 API 的官方文档。如果当前 API 不支持所需功能,则应考虑寻找替代 API 或通过本地数据管理来满足项目需求。遵循这些最佳实践将有助于构建更稳定、更可靠的应用程序。
以上就是Python requests 模块获取带分类随机词汇:API 限制与替代方案的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号