如何在Python中通过Google Translate API传入多文本输入?
如何用Python的urllib向Google Translate API传递多文本输入
我懂你这种困惑——用urllib调用API的时候,单个q参数好处理,但多个文本就容易卡壳。其实核心就是正确构建包含多个查询参数的请求,下面给你两种可行的方案,适配不同场景:
方案1:GET请求传递多个q参数
Google Translate API允许在GET请求里重复q参数来传递多段文本。用urllib.parse.urlencode的时候,只要把q的值设为列表,并加上doseq=True参数,就能自动生成多个q=xxx的查询串。
示例代码:
import urllib.request import urllib.parse import json # 配置参数 API_KEY = "你的Google API密钥" TARGET_LANG = "zh" texts_to_translate = ["Hello world", "Python is great", "I love coding"] # 构建查询参数 params = { "q": texts_to_translate, "target": TARGET_LANG, "key": API_KEY } # 注意这里必须加doseq=True,否则列表会被转成字符串 encoded_params = urllib.parse.urlencode(params, doseq=True) url = f"https://translation.googleapis.com/language/translate/v2?{encoded_params}" # 发送请求 opener = urllib.request.build_opener() response = opener.open(url) result = json.loads(response.read().decode()) # 解析结果 for idx, translation in enumerate(result["data"]["translations"]): print(f"原文: {texts_to_translate[idx]}") print(f"译文: {translation['translatedText']}\n")
方案2:POST请求传递多文本(更适合长文本)
如果你的文本内容较长,GET请求的URL长度限制可能会出问题,这时候用POST请求更稳妥。我们可以把参数以JSON格式放在请求体里,q同样设为列表:
示例代码:
import urllib.request import json API_KEY = "你的Google API密钥" TARGET_LANG = "zh" texts_to_translate = ["Hello world", "Python is great", "I love coding"] # 构建JSON请求体 payload = { "q": texts_to_translate, "target": TARGET_LANG, "key": API_KEY } json_payload = json.dumps(payload).encode("utf-8") # 创建请求对象,设置头部和请求体 url = "https://translation.googleapis.com/language/translate/v2" request = urllib.request.Request(url, data=json_payload, method="POST") request.add_header("Content-Type", "application/json; charset=utf-8") # 发送请求 opener = urllib.request.build_opener() response = opener.open(request) result = json.loads(response.read().decode()) # 解析结果 for idx, translation in enumerate(result["data"]["translations"]): print(f"原文: {texts_to_translate[idx]}") print(f"译文: {translation['translatedText']}\n")
关键注意点
- 一定要替换成你自己有效的Google API密钥,否则请求会返回权限错误。
- 如果用GET方式,
doseq=True是核心——没有它的话,列表会被转成类似q=[text1,text2]的字符串,API无法识别。 - POST方式的请求体必须是JSON格式,并且要设置正确的
Content-Type头部,否则API会拒绝处理。
内容的提问来源于stack exchange,提问作者Nandan Bhat
相关产品推荐
相关产品推荐

