CoderCastrov logo
CoderCastrov
Социальные сети

Как получить данные из Twitter

Как получить данные из Twitter
просмотров
9 мин чтение
#Социальные сети

Базовый учебник по парсингу Twitter

Быстрое введение в получение данных из Twitter с использованием Python

Эта статья сильно устарела, я создал обновленную версию этой статьи здесь: https://betterprogramming.pub/how-to-scrape-tweets-from-twitter-141ed19abb10


Обзор

Социальные медиа могут быть настоящим кладезем данных о мнении потребителей. Платформы, такие как Twitter, предоставляют полезную информацию, поскольку пользователи могут публиковать нефильтрованные мнения, которые легко можно получить. Комбинирование этой информации с другой внутренней информацией компании может помочь в получении представления о общем мнении людей относительно компаний, продуктов и т.д.

Этот учебник предназначен для быстрого и простого введения в получение данных из Twitter с использованием API Twitter от Tweepy или GetOldTweets3 от Dmitry Mottl. Чтобы указать направление для этого учебника, я решил сосредоточиться на двух аспектах: получение данных о твитах конкретного пользователя и получение данных о твитах по общему текстовому запросу.

Из-за интереса к решению без кодирования для получения данных о твитах, моя команда создает приложение, чтобы удовлетворить эту потребность. Да, это означает, что вам не нужно программировать для получения данных! В настоящее время мы находимся в стадии альфа-тестирования нашего приложения Socialscrapr. Если вы хотите принять участие или быть уведомленным о следующей фазе тестирования, пожалуйста, подпишитесь на нашу рассылку ниже!

Tweepy vs GetOldTweets3

Tweepy

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

Tweepy - это библиотека Python для доступа к API Twitter. Есть несколько различных типов и уровней доступа к API, которые предлагает Tweepy, как показано здесь, но они предназначены для очень конкретных случаев использования. Tweepy способен выполнять различные задачи, выходящие за рамки простого запроса твитов, как показано на следующей картинке. В целях актуальности мы сосредоточимся только на использовании этого API для парсинга твитов.

Список различных функций, предлагаемых через стандартное API Tweepy.

Есть ограничения в использовании Tweepy для парсинга твитов. Стандартное API позволяет получать твиты только за последние 7 дней и ограничено парсингом 18 000 твитов за 15-минутное окно. Однако возможно увеличить это ограничение, как показано здесь. Кроме того, используя Tweepy, вы можете получить только до 3200 самых последних твитов пользователя. Использование Tweepy отлично подходит для тех, кто пытается использовать другие функции Twitter, создавать сложные запросы или получать наиболее подробную информацию для каждого твита.

GetOldTweets3

_ОБНОВЛЕНИЕ: ИЗ-ЗА ИЗМЕНЕНИЙ В API TWITTER GETOLDTWEETS3 БОЛЬШЕ НЕ РАБОТАЕТ. SNSCRAPE СТАЛ ЗАМЕНОЙ В КАЧЕСТВЕ БЕСПЛАТНОЙ БИБЛИОТЕКИ, КОТОРУЮ ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ ДЛЯ ПАРСИНГА ЗА ПРЕДЕЛАМИ БЕСПЛАТНЫХ ОГРАНИЧЕНИЙ TWEEPY. МОЙ СТАТЬЯ ДОСТУПНА _ЗДЕСЬ.

GetOldTweets3 был создан Дмитрием Моттлом и является улучшенной версией GetOldTweets-python от Джефферсона Хенрика. Он не предлагает никакой другой функциональности, которую имеет Tweepy, а только сосредоточен на запросе твитов и не имеет таких же ограничений поиска, как Tweepy. Этот пакет позволяет получить большее количество твитов и твиты старше недели. Однако он не предоставляет такого объема информации, как Tweepy. На картинке ниже показана вся информация, которую можно получить из твитов с использованием этого пакета. Стоит отметить, что на данный момент есть открытая проблема с доступом к геоданным твита с помощью GetOldTweets3.

Список информации, которую можно получить в объекте твита GetOldTweet3.

Использование GetOldTweets3 - отличный вариант для тех, кто ищет быстрый и простой способ парсинга или хочет обойти стандартные ограничения поиска API Tweepy для парсинга большего количества твитов или твитов, старше недели.

Хотя они фокусируются на совершенно разных вещах, оба варианта, скорее всего, достаточны для большинства того, что обычно парсят. Только когда парсинг выполняется с конкретными целями, следует выбирать между этими вариантами.

Хорошо, достаточно объяснений. Это учебник по парсингу, поэтому давайте перейдем к кодированию.

_ОБНОВЛЕНИЕ: Я написал статью-последовательность, которая более подробно рассматривает, как получить больше информации из твитов, такую как информацию о пользователе и уточнение запросов для твитов, таких как поиск твитов по местоположению. Если вы прочитаете этот раздел и решите, что вам нужно больше, моя последующая статья доступна _здесь.

Тетради Jupyter для следующего раздела доступны на моем GitHub здесь. Я создал функции для экспорта CSV-файлов из этих примеров запросов.

Парсинг с помощью Tweepy

Для парсинга с помощью Tweepy требуются учетные данные разработчика Twitter. Если у вас уже есть учетные данные от предыдущего проекта, вы можете проигнорировать этот раздел.

Получение учетных данных для Tweepy

Чтобы получить учетные данные, вы должны подать заявку на статус разработчика Twitter здесь. Для этого требуется наличие учетной записи Twitter. В заявке будут заданы различные вопросы о том, какую работу вы планируете выполнять. Не беспокойтесь, эти детали не должны быть подробными, и процесс относительно прост.

Главная страница разработчика Twitter.

После заполнения заявки процесс одобрения обычно проходит быстро и не занимает больше нескольких дней. После одобрения вам нужно будет войти в систему и настроить среду разработки в панели управления разработчика, а затем просмотреть сведения об этом приложении, чтобы получить учетные данные разработчика, как показано на следующей картинке. Если вы не запрашивали доступ к другим предлагаемым API, теперь вы сможете использовать стандартное API Tweepy.

Учетные данные разработчика Tweepy.

Парсинг с использованием Tweepy

Отлично, у вас есть учетные данные разработчика Twitter и вы наконец можете начать парсить некоторые твиты.

Настройка авторизации Tweepy:

Прежде чем начать, вам необходимо авторизовать Tweepy, чтобы подтвердить, что у вас есть учетные данные для использования его API. Вот фрагмент кода, который позволяет авторизоваться.

consumer_key = "XXXXXXXXX"
consumer_secret = "XXXXXXXXX"
access_token = "XXXXXXXXX"
access_token_secret = "XXXXXXXXX"
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit=True)

Парсинг твитов конкретного пользователя Twitter:

Параметры поиска, на которые я сосредоточился, - это id и count. Id - это имя пользователя Twitter, а count - это максимальное количество самых последних твитов, которые вы хотите спарсить из ленты конкретного пользователя. В этом примере я использую имя пользователя Twitter генерального директора Twitter @jack и выбираю 100 его самых последних твитов. Большая часть кода для парсинга достаточно быстрая и простая.

username = 'jack'
count = 150
try:     
    # Создание запроса с использованием параметров
    tweets = tweepy.Cursor(api.user_timeline, id=username).items(count)
    
    # Извлечение информации из итерируемого объекта tweets
    tweets_list = [[tweet.created_at, tweet.id, tweet.text] for tweet in tweets]
    
    # Создание датафрейма из списка твитов
    # Добавьте или удалите столбцы в соответствии с информацией о твите
    tweets_df = pd.DataFrame(tweets_list)
except BaseException as e:
    print('failed on_status,', str(e))
    time.sleep(3)

Если вы хотите дополнительно настроить свой поиск, вы можете просмотреть остальные параметры поиска, доступные в методе api.user_timeline здесь.

Парсинг твитов из текстового запроса поиска:

Параметры поиска, на которые я сосредоточился, - это q и count. q должен быть текстовым запросом поиска, с помощью которого вы хотите выполнить поиск, а count - это снова максимальное количество самых последних твитов, которые вы хотите спарсить из этого конкретного запроса поиска. В этом примере я парсю 100 самых последних твитов, относящихся к выборам президента США 2020 года.

text_query = 'Выборы президента США 2020'
count = 150
try:
    # Создание запроса с использованием параметров
    tweets = tweepy.Cursor(api.search, q=text_query).items(count)
    
    # Извлечение информации из итерируемого объекта tweets
    tweets_list = [[tweet.created_at, tweet.id, tweet.text] for tweet in tweets]
    
    # Создание датафрейма из списка твитов
    # Добавьте или удалите столбцы в соответствии с информацией о твите
    tweets_df = pd.DataFrame(tweets_list)
except BaseException as e:
    print('failed on_status,', str(e))
    time.sleep(3)

Если вы хотите дополнительно настроить свой поиск, вы можете просмотреть остальные параметры поиска, доступные в методе api.search здесь.

Какая другая информация из твита доступна?

Одним из преимуществ запросов с использованием Tweepy является количество информации, содержащейся в объекте твита. Если вам интересно получить другую информацию, кроме той, которую я выбрал в этом руководстве, вы можете просмотреть полный список доступной информации в объекте твита Tweepy здесь. Чтобы показать, насколько легко получить больше информации, в следующем примере я создал список твитов со следующей информацией: когда он был создан, идентификатор твита, текст твита, пользователь, связанный с твитом, и количество "лайков" у твита на момент его получения.

tweets = tweepy.Cursor(api.search, q=text_query).items(count)
# Извлечение информации из итерируемого объекта tweets
tweets_list = [[tweet.created_at, tweet.id, tweet.text, tweet.user, tweet.favorite_count] for tweet in tweets]
# Создание датафрейма из списка твитов
tweets_df = pd.DataFrame(tweets_list)

Парсинг с помощью GetOldTweets3

_ОБНОВЛЕНИЕ: ИЗ-ЗА ИЗМЕНЕНИЙ В API TWITTER GETOLDTWEETS3 БОЛЬШЕ НЕ РАБОТАЕТ. SNSCRAPE СТАЛ ЗАМЕНОЙ В КАЧЕСТВЕ БЕСПЛАТНОЙ БИБЛИОТЕКИ, КОТОРУЮ МОЖНО ИСПОЛЬЗОВАТЬ ДЛЯ ПАРСИНГА ЗА ПРЕДЕЛАМИ БЕСПЛАТНЫХ ОГРАНИЧЕНИЙ TWEEPY. МОЙ СТАТЬЯ ДОСТУПНА ЗДЕСЬ ДЛЯ _SNSCRAPE.

Использование GetOldTweets3 не требует авторизации, как в случае с Tweepy, вам просто нужно установить библиотеку с помощью pip и можно начинать работу.

Парсинг твитов конкретного пользователя Twitter:

Два основных параметра, на которые я сосредоточился, это имя пользователя и количество твитов. В этом примере мы парсим твиты от конкретного пользователя, используя метод setUsername и устанавливая количество самых свежих твитов для просмотра с помощью setMaxTweets.

username = 'jack'
count = 2000# Создание объекта запроса
tweetCriteria = got.manager.TweetCriteria().setUsername(username)\
                                        .setMaxTweets(count)
# Создание списка, содержащего все твиты
tweets = got.manager.TweetManager.getTweets(tweetCriteria)# Создание списка выбранных данных твитов
user_tweets = [[tweet.date, tweet.text] for tweet in tweets]# Создание dataframe из списка твитов
tweets_df = pd.DataFrame(user_tweets)

Парсинг твитов по текстовому запросу:

Два основных параметра, на которые я сосредоточился, это текстовый запрос и количество твитов. В этом примере мы парсим твиты, найденные по текстовому запросу, используя метод setQuerySearch.

text_query = 'USA Election 2020'
count = 2000# Создание объекта запроса
tweetCriteria = got.manager.TweetCriteria().setQuerySearch(text_query)\
                                            .setMaxTweets(count)
# Создание списка, содержащего все твиты
tweets = got.manager.TweetManager.getTweets(tweetCriteria)# Создание списка выбранных данных твитов
text_tweets = [[tweet.date, tweet.text] for tweet in tweets]# Создание dataframe из списка твитов
tweets_df = pd.DataFrame(text_tweets)

Запросы могут быть дополнительно настроены путем комбинирования параметров поиска TweetCriteria. Все текущие параметры поиска TweetCriteria показаны ниже.

Current TweetCriteria search parameters.

Пример запроса с несколькими параметрами поиска:

Следующий запрос вернет 2000 твитов, относящихся к выборам в США 2020 года, которые были опубликованы с 1 января 2019 года по 31 октября 2019 года.

text_query = 'USA Election 2020'
since_date = '2019-01-01'
until_date = '2019-10-31'
count = 2000# Создание объекта запроса
tweetCriteria = got.manager.TweetCriteria().setQuerySearch(text_query)
.setSince(since_date).setUntil(until_date).setMaxTweets(count)# Создание списка, содержащего все твиты
tweets = got.manager.TweetManager.getTweets(tweetCriteria)# Создание списка выбранных данных твитов
text_tweets = [[tweet.date, tweet.text] for tweet in tweets]# Создание dataframe из списка твитов
tweets_df = pd.DataFrame(text_tweets)

Если вы хотите связаться, не стесняйтесь связаться со мной в LinkedIn

Ссылки

Если вас интересует, подпишитесь на нашу рассылку Socialscrapr: https://upscri.be/3kcmqx

Моя последующая статья, в которой более подробно рассматриваются оба пакета: https://towardsdatascience.com/how-to-scrape-more-information-from-tweets-on-twitter-44fd540b8a1f

Статья snscrape, которая помогает настроить и предоставляет несколько примеров запросов: https://medium.com/better-programming/how-to-scrape-tweets-with-snscrape-90124ed006af

GitHub с кодом скрэпера Twitter для этого учебника: https://github.com/MartinKBeck/TwitterScraper/tree/master/BasicScraper

Увеличение стандартного лимита поиска в API Tweepy: https://bhaskarvk.github.io/2015/01/how-to-use-twitters-search-rest-api-most-effectively./

GitHub Tweepy: https://github.com/tweepy/tweepy

GitHub GetOldTweets3: https://github.com/Mottl/GetOldTweets3