我正在尝试学习python,所以我决定编写一个可以使用谷歌翻译翻译的脚本。直到现在我写了这个:
import sys
from BeautifulSoup import BeautifulSoup
import urllib2
import urllib
data = {'sl':'en','tl':'it','text':'word'}
request = urllib2.Request('http://www.translate.google.com', urllib.urlencode(data))
request.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11')
opener = urllib2.build_opener()
feeddata = opener.open(request).read()
#print feeddata
soup = BeautifulSoup(feeddata)
print soup.find('span', id="result_box")
print request.get_method()
现在我被卡住了。我看不到它中的任何错误,但它仍然无效(我的意思是说脚本会运行,但它不会翻译这个词)。
有谁知道如何修复它? (抱歉我的英语不好)
答案 0 :(得分:8)
如果你想检查一下我制作了这个脚本: https://github.com/mouuff/Google-Translate-API :)
答案 1 :(得分:5)
Google翻译旨在与GET
请求一起使用,而不是POST
请求。但是,如果您向请求添加任何数据,urrllib2
将自动提交POST
。
解决方案是使用查询字符串构建网址,这样您就可以提交GET
。
您需要更改代码的request = urllib2.Request('http://www.translate.google.com', urllib.urlencode(data))
行。
这里是:
querystring = urllib.urlencode(data)
request = urllib2.Request('http://www.translate.google.com' + '?' + querystring )
您将获得以下输出:
<span id="result_box" class="short_text">
<span title="word" onmouseover="this.style.backgroundColor='#ebeff9'" onmouseout="this.style.backgroundColor='#fff'">
parola
</span>
</span>
顺便说一下,你有点打破谷歌的服务条款;如果你做的不仅仅是攻击一个用于训练的小脚本,那么请调查它们。
requests
我强烈建议您尽可能远离urllib,并使用优秀的requests
库,这样您就可以有效地使用HTTP
和Python。
答案 2 :(得分:3)
是的,他们的文件并不那么容易发现。
在Google云端平台控制台:
1.1 Go to the Projects page and select or create a new project
1.2 Enable billing for your project
1.3 Enable the Cloud Translation API
1.4 Create a new API key in your project,请确保通过IP或其他可用方式限制使用。
pip install --upgrade google-api-python-client
以下是代码:
import json
from apiclient.discovery import build
query='this is a test to translate english to spanish'
target_language = 'es'
service = build('translate','v2',developerKey='INSERT_YOUR_APP_API_KEY_HERE')
collection = service.translations()
request = collection.list(q=query, target=target_language)
response = request.execute()
response_json = json.dumps(response)
ascii_translation = ((response['translations'][0])['translatedText']).encode('utf-8').decode('ascii', 'ignore')
utf_translation = ((response['translations'][0])['translatedText']).encode('utf-8')
print response
print ascii_translation
print utf_translation