【问题标题】:urllib2.HTTPError: HTTP Error 400: Bad Requesturllib2.HTTPError:HTTP 错误 400:错误请求
【发布时间】:2014-01-01 20:55:46
【问题描述】:

我的代码是这样的

def translate(self, to_translate, to_langage="auto", langage="auto"):

 '''Return the translation using google translate
    you must shortcut the langage you define (French = fr, English = en, Spanish = es,    etc...)
    if you don't define anything it will detect it or use english by default
    Example:
    print(translate("salut tu vas bien?", "en"))
    hello you alright?'''

    agents = {'User-Agent': "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)"}


    before_trans = 'class="t0">'

    link = "http://translate.google.com/m?hl=%s&sl=%s&q=%s" % (to_langage, langage, urllib.quote(to_translate.encode('utf8')))

    request = urllib2.Request(link, headers=agents)

    page = urllib2.urlopen(request).read()
    result = page[page.find(before_trans) + len(before_trans):]
    result = result.split("<")[0]

    return result

我有这本词典

user_all = {1: {0: [], 'Your Favourite 5 Songs': [u'lethe', u'suliman', u'converting素食者', u'invasion', u'betrayel'], '你最喜欢的 2 位作家:[u'ajdar', u'bulent ersoy'],'Facebook 帐户链接':[''],'你最喜欢的 3 部电影':[u'hobbit', u'hobbit 2', u '霍比特人 3'], '你最喜欢的 3 位歌手': [u'感染蘑菇', u'shiro sagisu', u'disturbed'], '时间戳': [''], '年龄': [''], '爱好':[u'阅读',u'骑马',u'老虎狩猎'],'你最喜欢的3个演员/女演员':[u'gerard butler',u'tom hanks',u'jonny deep' ]、“选择你最喜欢的 3 种音乐流派”:[u'Blues']、“你最喜欢的运动队”:['']、“性别”:[u'male']、“家乡”:[u'istanbul' ], '部门': [u'EEE'], 'Twitter 帐户链接': [''], '你的 Sehir 学生地址': [u'talhatemiz@std.segir.edu.tr'], '你最喜欢的 3体育分支':['','',''],'选择你最喜欢的 2 本书类型':[u'Fantasy,Short Story Collections\xa0'],'你最喜欢的 2 导演':[u'guy riche' , u'david o runnell']}, 2: {0: [], '你的最喜欢的 5 首歌:[u'Belief', u'Slow dance in a burn room', u'seni cok istiyorum', u'one more cup of coffee', u'simple man'], 'Your Favourite 2 Writers' : [u'J. K. Rowling', u'Sabahattin Ali'], 'Facebook Account Link': [u'dgsdg'], '你最喜欢的 3 部电影': [u'Hobbit', u'The Lord Of The Rings', u'araba '],'你最喜欢的 3 位歌手':[u'John Mayer',u'Yavuz Cetin',u'Led Zeppelin'],'Timestamp':[''],'Age':[''],'Hobbies ': [u'Playing Guitar', u'Reading book', u'futbol oynamak'], 'Your Favorite 3 Actors/Actress': [u'Johnny Depp', u'Natalie Portman', u'Mila Kunis'] , '选择你最喜欢的 3 种音乐流派': [u'Blues, Indie, Rock'], '你最喜欢的运动队': [u'dsgg'], '性别': [u'Male'], '家乡': [u'Artvin'], '部门': [u'EEE'], 'Twitter 帐户链接': [u'sdgsg'], '你的 Sehir 学生地址': [u'Burak Altun'], '你最喜欢的 3 Sport Branches':[u'asd', u'asd', u'as\u015ffkndl'],'选择你最喜欢的 2 本书类型':[u'动作与冒险,科幻小说'],'你最喜欢的 2 位导演' : [u'Steven Spielberg', u'Quentin Tarantino']}}

我对此进行编码以达到每个单词

 for i in user_all.values():
     for j in i.values():
          for m in j:
              self.translate(m, to_langage="en", langage="auto")

我收到了这个错误

Traceback(最近一次调用最后一次):

文件“/Users/baltun/Documents/workspace/SimSurve/src/Reader/trying_translate.py”,第 99 行,在 打印 read.start_reading()

文件“/Users/baltun/Documents/workspace/SimSurve/src/Reader/trying_translate.py”,第 92 行,在 start_reading self.translate(m, to_langage="en", langage="auto")

文件“/Users/baltun/Documents/workspace/SimSurve/src/Reader/trying_translate.py”,第 38 行,翻译中 page = urllib2.urlopen(request).read()

文件“/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py”,第 126 行,在 urlopen return _opener.open(url, data, timeout)

文件“/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py”,第 397 行,打开 response = meth(req, response)

文件“/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py”,第 510 行,在 http_response 'http', 请求, 响应, 代码, msg, hdrs)

文件“/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py”,第 435 行,错误 return self._call_chain(*args)

文件“/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py”,第 369 行,在 _call_chain 结果 = func(*args)

文件“/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py”,第 518 行,位于 http_error_default 引发 HTTPError(req.get_full_url(), 代码, msg, hdrs, fp) urllib2.HTTPError: HTTP 错误 400: 错误请求

你能帮帮我吗?

【问题讨论】:

  • 我想你必须编码你的 link 字符串
  • 我明白为什么会这样。它只能翻译一个词,如果字符串多于一个词,它就无法翻译。我该如何解决这个问题?
  • 您能否将to_langagelangageto_translate 的值添加到您的代码中?我的下面的答案对我有用。
  • 我编辑了问题@OmidRaha
  • 好的,你说得对,这个网址link 返回一个400 Bad Request

标签: python entity-framework google-translate


【解决方案1】:
# coding: utf8
import urllib
import urllib2

agents = {
    'User-Agent': "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)"}

to_langage, langage, to_translate = 'en', 'fa',  u'سلام بر جهان'

before_trans = 'class="t0">'

link = "http://translate.google.com/m?hl=%s&sl=%s&q=%s" % (to_langage, langage, urllib.quote(to_translate.encode('utf8')))

request = urllib2.Request(link, headers=agents)

page = urllib2.urlopen(request).read()
result = page[page.find(before_trans) + len(before_trans):]
result = result.split("<")[0]

print(result)

Hello World

好的,这个例子有效,但我找到了为什么你得到 400 错误。

在您定义的user_all 字典中,有一个字符串u'Yavuz Cetin',其中包含Yavu

在土耳其语中,Yavu 这个词的意思是 slow,所以这个词的谷歌翻译返回 HTTP 400 错误!!

要解决这个问题,你可能想在user_all定义的字典中更改这个词或联系谷歌!!

查看 translate.google.com/m?hl=en&sl=auto&tl=en&ie=UTF-8&prev=_m&q=yavugoogle.com/search?q=google%20translate%20yavu%20400

【讨论】:

  • 现在我遇到了这个问题@OmidRaha AttributeError: 'float' object has no attribute 'encode'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-25
  • 1970-01-01
  • 2012-02-09
  • 2014-09-05
  • 1970-01-01
相关资源
最近更新 更多