JSONDecodeError: использование модуля googletrans

Я пытаюсь перевести 100 000 английских слов на корейский с помощью модуля googletrans. Но после некоторой итерации он поднимает

«JSONDecodeError: Ожидаемое значение: строка 1, столбец 1 (символ 0)».

Я пытался разобраться, но решения в Интернете мне не подошли.
Что я пробовал?

  1. Повторная инициализация Translator() на каждой итерации,
  2. Time-sleep(.4) на каждой итерации.

Самое странное, что это происходит случайно. Иногда он поднимается после нескольких сотен итераций, иногда после нескольких итераций.

Я проверил руководство по этому модулю, и единственное ограничение, которое я смог найти, заключалось в том, что оно ограничивает только длину слова. Однако все слова, которые я пытаюсь перевести, являются просто буквальными словами, а не фразами или предложениями.

key_list = list(senticnet.keys())
for key in key_list:
  translator = Translator()
  time.sleep(.4)
  print(translator.translate(key, dest='ko'))

В приведенном выше коде senticnet является переменной словаря. Это выглядит как

senticnet['abusive_conduct'] = ['0', '0', '0.853', '-0.84', '#anger', '#disgust', 'negative', '-0.84', 'flagrant', 'cry', 'glaring', 'gross', 'rank']
senticnet['abusive_father'] = ['0', '0', '0.821', '-0.95', '#anger', '#disgust', 'negative', '-0.88', 'student', 'serious_student', 'addiction', 'graduate_student', 'hard_worker']

Вот сообщение об ошибке

/content/gdrive/My Drive/Colab Notebooks/py-googletrans/googletrans/client.py in translate(self, text, dest, src)
170 
171         origin = text
--> 172         data = self._translate(text, dest, src)
173 
174         # this code will be updated when the format is changed.

/content/gdrive/My Drive/Colab Notebooks/py-googletrans/googletrans/client.py in _translate(self, text, dest, src)
 79         r = self.session.get(url, params=params)
 80 
---> 81         data = utils.format_json(r.text)
 82         return data
 83 

/content/gdrive/My Drive/Colab Notebooks/py-googletrans/googletrans/utils.py in format_json(original)
 60         converted = json.loads(original)
 61     except ValueError:
---> 62         converted = legacy_format_json(original)
 63 
 64     return converted

/content/gdrive/My Drive/Colab Notebooks/py-googletrans/googletrans/utils.py in legacy_format_json(original)
 52             text = text[:p] + states[j][1] + text[nxt:]
 53 
---> 54     converted = json.loads(text)
 55     return converted
 56 

/usr/lib/python3.6/json/__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
352             parse_int is None and parse_float is None and
353             parse_constant is None and object_pairs_hook is None and not kw):
--> 354         return _default_decoder.decode(s)
355     if cls is None:
356         cls = JSONDecoder

/usr/lib/python3.6/json/decoder.py in decode(self, s, _w)
337 
338         """
--> 339         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
340         end = _w(s, end).end()
341         if end != len(s):

/usr/lib/python3.6/json/decoder.py in raw_decode(self, s, idx)
355             obj, end = self.scan_once(s, idx)
356         except StopIteration as err:
--> 357             raise JSONDecodeError("Expecting value", s, err.value) from None
358         return obj, end

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

person zzaebok    schedule 15.10.2018    source источник


Ответы (2)


Вопрос: я проверил руководство по этому модулю, и единственное ограничение, которое я смог найти, заключалось в том, что оно ограничивает только длину слова.


Есть несколько других ограничений!

Из документации Googletrans 2.3.0.

Примечание об использовании библиотеки

  • Из-за ограничений веб-версии Google Translate этот API не гарантирует, что библиотека всегда будет работать должным образом. (поэтому, пожалуйста, используйте эту библиотеку, если вас не волнует стабильность.)
  • Если вы хотите использовать стабильный API, я настоятельно рекомендую вам использовать официальный API перевода Google.
  • Если вы получаете ошибку HTTP 5xx или ошибки типа #6, возможно, это связано с тем, что Google заблокировал IP-адрес вашего клиента.
person stovfl    schedule 15.10.2018
comment
Спасибо, думаю проблема в стабильности модуля. Мне нужно найти другой модуль (или официальный API): ( - person zzaebok; 16.10.2018

Ошибка вводит в заблуждение, это происходит потому, что вы получаете отказ от Google из-за многочисленных запросов. Я мог бы решить эту проблему двумя разными способами:

  1. Используйте VPN и измените свой IP. Это будет работать снова.
  2. Зайди в гугл и найди что-нибудь. Вы получите сообщение и reCAPTCHA для решения. После того, как вы это сделаете, он снова будет работать некоторое время.
person Aneho    schedule 10.03.2020