CoderCastrov logo
CoderCastrov
Анализ данных

Парсинг твитов по местоположению в Python с использованием snscrape

Парсинг твитов по местоположению в Python с использованием snscrape
просмотров
5 мин чтение
#Анализ данных

Глубокое погружение в обертку 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