用Python脚本通过谷歌翻译转换网址
我正在尝试在一个Python脚本中使用谷歌翻译:
#!/usr/bin/env python
from urllib2 import urlopen
from urllib import urlencode
base_url = "http://www.google.com/translate?"
params = (('langpair','en|es'), ('u','http://asdf.com'),)
url = base_url+urlencode(params)
print "Encoded URL: %s" % url
print urlopen(url).read()
但是当我使用它时,出现了403错误。
# ./1.py
Encoded URL: http://www.google.com/translate?langpair=en%7Ces&u=http%3A%2F%2Fasdf.com
Traceback (most recent call last):
...
urllib2.HTTPError: HTTP Error 403: Forbidden
不过,当我在浏览器中打开同样的链接时,一切正常。有人能帮我找出问题吗?或者是谷歌不允许这样使用?
提前谢谢大家!
5 个回答
你应该使用谷歌的API。我找到了并测试了这段代码,它可以正常工作:
#!/usr/bin/env python
from urllib2 import urlopen
from urllib import urlencode
import sys
lang1=sys.argv[1] # 这里是获取你输入的第一个语言参数
lang2=sys.argv[2] # 这里是获取你输入的第二个语言参数
langpair='%s|%s'%(lang1,lang2) # 这行代码把两个语言参数组合成一个字符串,格式是“语言1|语言2”
text=' '.join(sys.argv[3:]) # 这行代码把你输入的第三个及后面的所有参数合并成一个字符串,作为要翻译的文本
base_url='http://ajax.googleapis.com/ajax/services/language/translate?' # 这是谷歌翻译服务的基础网址
params=urlencode( (('v',1.0), # 这里设置了API的版本
('q',text), # 这里是要翻译的文本
('langpair',langpair),) ) # 这里是刚才组合的语言对
url=base_url+params # 这行代码把基础网址和参数组合成完整的请求网址
content=urlopen(url).read() # 这行代码发送请求并读取返回的内容
start_idx=content.find('"translatedText":"')+18 # 这里找到翻译文本的开始位置
translation=content[start_idx:] # 这行代码提取出翻译文本
end_idx=translation.find('"}, "') # 这里找到翻译文本的结束位置
translation=translation[:end_idx] # 这行代码截取出完整的翻译文本
print translation # 最后打印出翻译结果
如果谷歌不允许你这样做,你可以通过谷歌的API来编程地翻译普通网站的源代码。
我之前写了一个函数来实现这个功能:
def translate(text, src = '', to = 'en'):
parameters = ({'langpair': '{0}|{1}'.format(src, to), 'v': '1.0' })
translated = ''
for text in (text[index:index + 4500] for index in range(0, len(text), 4500)):
parameters['q'] = text
response = json.loads(urllib.request.urlopen('http://ajax.googleapis.com/ajax/services/language/translate', data = urllib.parse.urlencode(parameters).encode('utf-8')).read().decode('utf-8'))
try:
translated += response['responseData']['translatedText']
except:
pass
return translated