#python #tweepy
#python #tweepy
Вопрос:
Я пытаюсь отслеживать учетные записи нескольких компаний в Твиттере, экспортируя твиты в .csv, чтобы посмотреть на позитивность или негативность твитов, которые включают название компании, которое затем будет визуализировано.
Чтобы облегчить себе задачу, я присваиваю каждому твиту только одно число, от 1 (отрицательное) до 10 (положительное), однако написанный мной код не дает никакой обратной связи (остается равным 0), застревает в цикле For или выдает синтаксическую ошибку.
Используя Jupyter notebook, я попытался создать оператор If / Elif из 10 строк — из-за того, что в Python нет оператора case, и вставил этот код как в метод ‘get Tweets’, так и в метод ‘write csv’.
Получать твиты
api = tweepy.API(auth)
query = "ASOS"
language = "en"
results = api.search(q=query, lang=language, count=100)
for tweet in results:
if (not tweet.retweeted) and ('RT @' not in tweet.text):
print(tweet.user.screen_name,"Tweeted:",tweet.text,**rating**)
print()
Напишите CSV
import csv
api = tweepy.API(auth)
csvFile = open('ASOS with emojis1.csv', 'a')
csvWriter = csv.writer(csvFile)
results = api.search(q=query, lang=language, count=100)
for tweet in results:
if (not tweet.retweeted) and ('RT @' not in tweet.text):
csvWriter.writerow([tweet.created_at, tweet.user.screen_name, tweet.text, **rating**])
csvFile.close()
Оператор If / Elif, который я написал
rating = '0'
if 'abysmal' or 'appalling' or 'dreadful' or 'awful' or 'terrible' or 'very bad' or 'really bad' or '😡' or '😠' or '😷' in tweet.text:
(rating = '1')
elif 'rubbish' or 'unsatisfactory' or 'bad' or 'poor' or '🙁' or '😞' or ':(' or '):' or '💀' in tweet.text:
(rating = '2')
elif 'quite bad' or 'pretty bad' or 'somewhat bad' or 'below average' or '💔' or '😣' or '☹️' or '😒' or '😢' in tweet.text:
(rating = '3')
elif 'mediocre' or '🙃' or '👎' or '🙄' or '🤔' or '😪' in tweet.text:
(rating = '4')
elif 'average' or 'not bad' or 'fair' or 'alright' or 'ok' or 'satisfactory' or 'fine' or 'somewhat good' or '😳' or '😭' or '😩' or '😫' or '👀' or '😱' or '😬' or 'omg' in tweet.text:
(rating = '5')
elif 'quite good' or 'decent' or 'above average' or 'pretty good' or 'good' or '🙂' or '💪' or '😅' or '😎' or '😈' in tweet.text:
(rating = '6')
elif 'great' or 'gr8' or 'really good' or 'rlly good' or 'very good' or 'v good' or '💖' or '☺️' or '😘' or '😌' or '👍' or '👏' or '🙌' ':)' or '(:' or '💥' or '💙' or '🤣' or '🖤' or '👌' in tweet.text:
(rating = '7')
elif 'awesome' or 'fantastic' or '😂' or '💕' or '😍' or '😊' or '❤' or '♥' or '💜' or '💛' or '✅' or '🎉' or '🤗' or '🙏' or '✨' in tweet.text:
(rating = '8')
elif 'superb' or 'brilliant' or 'incredible' or 'excellent' or 'oustanding' or '😁' or '😄' or '🥰' or '💯' in tweet.text:
(rating = '9')
elif 'perfect' in tweet.text:
(rating = '10')
else:
(rating = 'N/A')
Ожидается: создается файл .csv с различными номерами в
Актуально: (рейтинг = ‘1’) SyntaxError: недопустимый синтаксис
Ответ №1:
Ваши условия не работают должным образом. Чтобы связать условное:
mylist = [1, 2, 3]
# Note that the full condition must be specified for
# each desired conditional
if 1 in mylist or 2 in mylist or 3 in mylist:
print("True")
# True
Проблема с тем, что вы используете, заключается в том, что вы подходите к логике так, как вы бы ее сказали, а не так, как интерпретатор ее читает. В качестве примера:
if 'a' or 'b':
print('True')
# True
Заполненные строки действуют как True
и будут оценивать ваше условие как таковое, поэтому следует внести изменения таким образом, чтобы было указано все условие:
# Evaluates to True, though it's not what you want
if 'a' and 'b' in 'bc':
print(True) # This is not what you want, but 'a' is read as 'true'
# True
if 'a' in 'bc' and 'b' in 'bc':
print(True)
# Doesn't print True because 'a' in 'bc' is False
Здесь может помочь any
функция, поскольку она будет выглядеть, если какое-либо из значений примет значение True
:
mylist = [1, 2, 3]
if any([i in mylist for i in range(2,5)]):
print("True")
# True
Кроме того, нет необходимости в круглых скобках вокруг присваивания переменной:
if 'abysmal' in tweet.text or 'horrible' in tweet.text:
rating = 0
elif ...:
rating = 1
# So on and so forth
Комментарии:
1. Невероятное спасибо, я единственный, кто использует код, и это только для временного проекта, поэтому мне не нужно, чтобы он «выглядел» слишком красиво. Это было идеально.