KeyError: «пользователи» при использовании tweepy для очистки данных Twitter, как я могу обойти эту ошибку?

Я собираюсь извлечь информацию из твиттера, используя академическую учетную запись через пакет tweepy, он отлично работает в течение нескольких месяцев, но в определенные месяцы он показывал «KeyError: 'users'». Как мне обойти ошибку?

Вот код, который я исполняю;

tweets = []

for i,j in zip(start_time,end_time):
    print(i)
    print(j)
    for response in tweepy.Paginator(client.search_all_tweets, 
                                     query = 'ไทรอยด์ -is:retweet lang:th',
                                     user_fields = ['username', 'public_metrics', 'description', 'location'],
                                     tweet_fields = ['created_at', 'geo', 'public_metrics', 'text'],
                                     expansions = ['author_id', 'geo.place_id'],
                                     start_time = i,
                                     end_time = j):
                                     
        time.sleep(1)
        tweets.append(response)
    result = []
    user_dict = {}
    
    for response in tweets:
        
        for user in response.includes['users']:
            user_dict[user.id] = {'username': user.username, 
                                  'followers': user.public_metrics['followers_count'],
                                  'tweets': user.public_metrics['tweet_count'],
                                  'description': user.description,
                                  'location': user.location
                                 }

Полученные результаты:

2020-08-01T00:00:00Z
2020-08-31T23:59:59Z
Rate limit exceeded. Sleeping for 30 seconds.
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_13308/265973239.py in <module>
     23     for response in tweets:
     24         # Take all of the users, and put them into a dictionary of dictionaries with the info we want to keep
---> 25         for user in response.includes['users']:
     26             user_dict[user.id] = {'username': user.username, 
     27                                   'followers': user.public_metrics['followers_count'],

KeyError: 'users'
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете заставить свой код использовать пустое значение по умолчанию, чтобы он не терпел неудачу, если поле users не существует:

for user in response.includes.get('users', ''):
     # do something with user

Однако это устраняет только симптом. Чтобы выяснить причину, по которой поле не существует, вы можете попробовать проверить ключи перед их использованием (например, if 'users' in response.includes) и распечатать полные данные ответа, чтобы получить больше информации. Одна подсказка - это сообщение об ограничении скорости, которое вы получили.

Спасибо @Jan Wilamowski - поэтому я сначала печатаю результат и конвертирую в формат .csv. Я не получил твиты за весь период, как я ожидал. Таким образом, я скорректировал временные рамки, чтобы избежать ошибки.

tassaneel 13.05.2022 10:23

Другие вопросы по теме