“Мы верим в Бога. Все остальные должны принести данные. “-У. Эдвардс Деминг
Если вы начинаете в невероятном поле NLP, вы захотите испачкать руки с помощью реальных текстовых данных, которые вы можете использовать, чтобы играть с концепциями, которые вы узнали. Twitter является отличным источником таких данных. В этом посте я представлю скребок, который вы можете использовать, чтобы очистить твиты тем, которые вас интересуют, и получить все занудное, как только вы получите свой набор данных. Я использовал эту удивительную библиотеку, которую вы можете найти здесь . Я расскажу о том, как установить и использовать эту библиотеку, а также предложу некоторые методы, чтобы сделать весь процесс быстрее, используя параллелизацию. Полный ноутбук, содержащий код, можно найти здесь
Монтаж
Библиотека может быть установлена с помощью PIP3 с помощью следующей команды
pip3 install twitter_scraper
Создание списка ключевых слов
Следующая задача – создать список ключевых слов, которые вы хотите использовать для соскоба Twitter.
# List of hashtags that we're interested in keywords = ['machinelearning', 'ML', 'deeplearning', '#artificialintelligence', '#NLP', 'computervision', 'AI', 'tensorflow', 'pytorch', "sklearn", "pandas", "plotly", "spacy", "fastai", 'datascience', 'dataanalysis']
Соскабливание твитов за одно ключевое слово
Прежде чем мы запустим нашу программу, чтобы извлечь все ключевые слова, мы запустим нашу программу одним ключевым словом и распечатаем поля, которые мы можем извлечь из объекта. В приведенном ниже коде я показал, как итерация над возвращенным объектом и распечатать поля, которые вы хотите извлечь. Вы можете видеть, что у нас есть следующие поля, которые мы извлекаем
- Твит идентификатор
- Это ретвит или нет
- Время твита
- Текст твита
- Ответы на твит
- Всего ретвитов
- Любит твит
- Записи в твиттере
# Lets run one iteration to understand how to implement this library tweets = get_tweets("#machinelearning", pages = 5) tweets_df = pd.DataFrame() # Lets print the keys and values obtained for tweet in tweets: print('Keys:', list(tweet.keys()), '\n') break # Running the code for one keyword and extracting the relevant data for tweet in tweets: _ = pd.DataFrame({'text' : [tweet['text']], 'isRetweet' : tweet['isRetweet'], 'replies' : tweet['replies'], 'retweets' : tweet['retweets'], 'likes' : tweet['likes'] }) tweets_df = tweets_df.append(_, ignore_index = True) tweets_df.head()
Запуск кода последовательно для всех ключевых слов
Теперь, когда мы решили, какие данные мы хотим хранить в нашем объекте, мы запустим нашу программу последовательно, чтобы получить твиты тем, которые нас интересуют. Мы сделаем это с помощью нашего знакомого для цикла, чтобы пройти каждое ключевое слово один за другим и сохранить успешные результаты.
# We'll measure the time it takes to complete this process sequentially %%time all_tweets_df = pd.DataFrame() for word in tqdm(keywords): tweets = get_tweets(word, pages = 100) try: for tweet in tweets: _ = pd.DataFrame({'hashtag' : word, 'text' : [tweet['text']], 'isRetweet' : tweet['isRetweet'], 'replies' : tweet['replies'], 'retweets' : tweet['retweets'], 'likes' : tweet['likes'] }) all_tweets_df = all_tweets_df.append(_, ignore_index = True) except Exception as e: print(word, ':', e) continue
Запуск кода параллельно
Из Документация , Multiprocessing – это пакет, который поддерживает процессы нереста с использованием API, аналогичного потоковому модулю. Многопроцессорный пакет предлагает как локальную, так и удаленную параллелизму, эффективно складывая глобальную блокировку интерпретатора, используя подпроцессы вместо потоков. Благодаря этому многопроцестрирующий модуль позволяет программисту полностью использовать несколько процессоров на данной машине.
Во -первых, мы будем реализовать функцию, чтобы очистить данные.
# We'll create a function to fetch the tweets and store it for us def fetch_tweets(word): tweet_df = pd.DataFrame() tweets = get_tweets(word, pages=100) try: for tweet in tweets: _ = pd.DataFrame({'hashtag' : word, 'text' : [tweet['text']], 'isRetweet' : tweet['isRetweet'], 'replies' : tweet['replies'], 'retweets' : tweet['retweets'], 'likes' : tweet['likes'] }) tweet_df = tweet_df.append(_, ignore_index = True) except Exception as e: print(word, ':', e) return tweet_df
Далее мы создадим подпроцессы для запуска нашего кода параллельно.
# We'll run this in parallel with 4 subprocesses to compare the times %%time with Pool(4) as p: records = p.map(fetch_tweets, keywords)
Вывод
Как вы можете видеть, мы сократили время нашего процесса почти до 1/4 -го последовательного выполнения. Вы можете использовать этот метод для аналогичных задач и сделать свой код Python намного быстрее. Удачи с царапином!
Оригинал: “https://dev.to/anshaj/scraping-twitter-data-using-python-for-nlp-tasks-2je7”