Парсинг твитов по местоположению в Python с использованием snscrape
Table Of Content
- Введение в snscrape на Python
- Creating list to append tweet data to
- Using TwitterSearchScraper to scrape data and append tweets to list
- Расширенные функции поиска
- Парсинг по местоположению
- Что именно является этим местоположением?
- Получение местоположения из скрапнутого твита
- Когда это не работает как ожидалось
- Заключение
- Ссылки
Глубокое погружение в обертку Python для snscrape, как использовать ее для поиска твитов по местоположению и почему иногда она не работает так, как ожидается.
snscrape - это библиотека, которая позволяет сканировать твиты без необходимости использования персональных API-ключей. Она может вернуть тысячи твитов за считанные секунды и имеет мощные инструменты поиска, которые позволяют выполнять высоко настраиваемые запросы. В настоящее время документация по парсингу твитов по местоположению оставляет желать лучшего, поэтому я надеюсь предоставить подробное введение в эту тему.
Введение в snscrape на Python
В течение этой статьи я буду использовать разрабатываемую версию snscrape, которую можно установить с помощью
pip install git+https://github.com/JustAnotherArchivist/snscrape.git
Примечание: для этого требуется Python 3.8 или выше
Также необходимо иметь некоторое представление о модуле Pandas
.
Только три пакета требуются, показанных ниже.
Чтобы найти первые (т.е. самые свежие) 100 твитов, содержащих фразу "data science", мы можем использовать следующий код:
import snscrape.modules.twitter as sntwitter
# Creating list to append tweet data to
tweets = []
# Using TwitterSearchScraper to scrape data and append tweets to list
for i,tweet in enumerate(sntwitter.TwitterSearchScraper('data science').get_items()):
tweets.append(tweet)
# Stop scraping after 100 tweets
if i > 100:
break
Это можно сократить до следующей строки:
tweets = list(sntwitter.TwitterSearchScraper('data science').get_items())[:100]
Вывод первых пяти результатов позволяет нам увидеть информацию, предоставляемую этой строкой:
но это еще не все! Всего она возвращает 21 столбец данных, которые представлены ниже:
Я рекомендую поиграть с кодом, чтобы узнать, что означает каждый из этих столбцов, или ознакомиться с этой статьей, чтобы узнать больше. Я более подробно расскажу о поле user позже.
Расширенные функции поиска
TwitterSearchScraper
использует расширенный поиск Twitter; для подробного описания всех его возможностей посмотрите эту таблицу - я настоятельно рекомендую!
Парсинг по местоположению
При фильтрации по местоположению есть два варианта: вы можете использовать тег near:city
вместе с within:radius
или geocode:lat,long,radius
. После обширного исследования я могу подтвердить, что они дают идентичные результаты при правильном использовании (или, скажем, как Twitter их интерпретирует).
В качестве примера, скажем, вы хотите найти все твиты о пицце в Лос-Анджелесе. Это можно сделать с помощью следующего кода:
Вместо использования названия города вы можете использовать его координаты:
Для сравнения результатов мы можем использовать внутреннее объединение двух DataFrame:
Которое возвращает 50
, то есть они содержат точно такие же строки.
Что именно является этим местоположением?
Есть два способа получить местоположение из Twitter: геотег из конкретного твита или местоположение пользователя в его профиле. Согласно Twitter, только 1-2% твитов имеют геотег, поэтому это не очень хорошая метрика для использования; с другой стороны, значительное количество пользователей указывает местоположение в своем профиле, но они могут ввести что угодно. Некоторые люди добры к нам и пишут "Лондон, Англия" или что-то подобное, в то время как другие менее полезны и указывают такие вещи, как "Подвал моих родителей".
Вся документация, которую я смог найти, указывала, что использование местоположения в поиске найдет только твиты с геотегом, однако это не так. Из моих исследований я обнаружил, что Twitter использует некоторые алгоритмы в рамках своего расширенного поиска, которые могут интерпретировать местоположение пользователя на основе его профиля и предполагает, что все его твиты приходят оттуда. Это означает, что при поиске твитов с использованием координат или названия города, поиск возвращает твиты, которые имеют геотег из этого местоположения или которые были опубликованы пользователями с этим местоположением (или где-то поблизости) в их профиле.
В качестве примера, когда я искал твиты near:"Лондон"
, я смог найти примеры обоих случаев:
Первый твит имеет геотег, и у пользователя нет местоположения в профиле, то есть твит был найден из-за его геотега. Второй твит не имеет геотега и был найден, потому что у пользователя указано местоположение в его профиле.
Получение местоположения из скрапнутого твита
Если вы хотите получить местоположение пользователя, скрапнув твит, это также возможно с использованием snscrape. В приведенном ниже примере я скраплю 50 твитов в пределах 10 км от Лос-Анджелеса, сохраняю их в виде DataFrame, а затем создаю новый столбец для местоположения пользователя.
Просмотрев первые 5 строк, мы видим, что хотя не все местоположения отформатированы одинаково, все они могут быть интерпретированы как Лос-Анджелес.
Когда это не работает как ожидалось
Способ, которым Twitter использует этот тег поиска, неочевиден, и при итерации по округам и единичным властям в Англии я обнаружил, что результаты несогласованы. Например, при поиске твитов near:Lewisham
, все твиты, кажется, имеют геометку и происходят из Хобарта, Австралия (см. ниже); это более чем в 17 000 км отсюда! Я обнаружил, что использование названий городов работает ожидаемым образом, но названия городов, деревень и даже стран возвращают подозрительные результаты.
При использовании snscrape для скрапинга твитов по местоположению я всегда рекомендую использовать тег **geocode**
с координатами долготы и широты, с радиусом, ограничивающим область поиска. Это позволит получить наиболее точные результаты, учитывая доступные данные и функции.
Заключение
Этот простой, но невероятно мощный модуль Python позволяет выполнять очень конкретные поисковые запросы. Опять же, я рекомендую ознакомиться с этой таблицей, чтобы получить полное представление о его возможностях. Twitter сделал тяжелую работу по преобразованию пользовательского ввода местоположений в реальные места, позволяя нам находить их по имени или координатам. Твиты предоставляют отличный источник информации, и когда они используются с таким мощным инструментом, как snscrape, можно выполнить широкий спектр интересных проектов без особого опыта в области науки о данных или знаний по этой теме! Удачного парсинга :)
Весь код, упомянутый в статье, можно найти здесь: https://github.com/satomlins/snscrape-by-location
Найдите меня в LinkedIn
Ссылки
snscrape GitHub: https://github.com/JustAnotherArchivist/snscrape
Операторы расширенного поиска Twitter: https://github.com/igorbrigadir/twitter-advanced-search
Статья-справочник о том, как использовать обертку Python для snscrape: https://medium.com/better-programming/how-to-scrape-tweets-with-snscrape-90124ed006af