Я собираюсь извлечь информацию из твиттера, используя академическую учетную запись через пакет 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'
Вы можете заставить свой код использовать пустое значение по умолчанию, чтобы он не терпел неудачу, если поле users
не существует:
for user in response.includes.get('users', ''):
# do something with user
Однако это устраняет только симптом. Чтобы выяснить причину, по которой поле не существует, вы можете попробовать проверить ключи перед их использованием (например, if 'users' in response.includes
) и распечатать полные данные ответа, чтобы получить больше информации. Одна подсказка - это сообщение об ограничении скорости, которое вы получили.
Спасибо @Jan Wilamowski - поэтому я сначала печатаю результат и конвертирую в формат .csv. Я не получил твиты за весь период, как я ожидал. Таким образом, я скорректировал временные рамки, чтобы избежать ошибки.