Как обработать ошибку Unicode на объектах JSON в python? - PullRequest
0 голосов
/ 25 апреля 2019

Когда я вызываю Twitter API, он дает мне строку твитов в формате JSON

например Пример


data = {"creat_at": «Пн 22 апреля 22:45:05 +0000 2019», «text»: «Только что подтверждено! Марк Дердзинский, специалист по данным Data @dexcom, присоединяется к нашей панели Data Science! Выпускник UCSD , Mark st \ u2026 https://t.co/sPNgvMvx9t","extended_tweet":{"full_text":"Just подтвержден! Марк Дердзински, Data Scientist @dexcom, присоединяется к нашей панели Data Science! Квадрат UCSD, Марк изучает данные о пациентах, коммерческих объектах и ​​устройствах, чтобы генерировать действенные бизнес-идеи и улучшать результаты пациентов. #Dexcom #datascienceday #techsandiego #ucsd https://t.co/89ktI7jKI3","display_text_range":[0,276]}


когда я проверяю тип, он говорит ул. для анализа я конвертировал в dict используя

a = json.loads(data)

После этого я пытаюсь проанализировать ["extended_text"] ["full_text"], чтобы получить полный твит

но я получил UnicodeError, поэтому, просмотрев несколько потоков, я обнаружил, что должен был закодировать строку, и использовал приведенный ниже код

y = y['extended_tweet']['full_text'].encode(encoding='UTF-8')

Но когда я пытаюсь напечатать (y), если full_tweet содержит ссылки, он не очищается и отображается как есть.

Итак, я планировал очистить твит с помощью приведенного ниже кода (также можно найти в Интернете #begineerlife)

URLless_string = re.sub(r'\w+:\/{2}[\d\w-]+(\.[\d\w-]+)*(?:(?:\/[^\s/]*))*', '', y)

Я получаю сообщение об ошибке

TypeError: can't use a string pattern on a bytes-like object

Пожалуйста, помогите мне решить проблему. Я не уверен, как мне разобрать чистый твит.

ПОЛНЫЙ КОД, как показано ниже

def on_data(self, data):
        y = json.loads(data)

        try:
            y = y['extended_tweet']['full_text'].encode(encoding='UTF-8')
            print(type(y))
            URLless_string = re.sub(r'\w+:\/{2}[\d\w-]+(\.[\d\w-]+)*(?:(?:\/[^\s/]*))*', '', y)
            print(URLless_string)
        except KeyError:
            y = y['text'].encode(encoding='UTF-8')
            print(type(y))
            URLless_string = re.sub(r'\w+:\/{2}[\d\w-]+(\.[\d\w-]+)*(?:(?:\/[^\s/]*))*', '', y)
            print(URLless_string)

Метод «попробуй и ожидай» используется потому, что В некоторых твитах нет Full_tweets, поэтому мне просто нужно полагаться на клавишу ["text"] на объекте dict.

Если бы вы могли помочь мне в доработке кода, это тоже очень помогло бы.

Заранее спасибо.

...