Как парсить твиты с использованием Tweepy
В прошлый вторник начался "Фестиваль итальянской музыки Санремо". Санремо - это крупнейший итальянский музыкальный фестиваль. Во время последнего шоу я услышал, что первый эпизод стал самым комментируемым в социальных сетях за всю историю.
Эта новость сразу дала мне идею, почему бы не спарсить твиты с хэштегом #Sanremo2021 и проанализировать их?
Я начал гуглить немного, затем написал небольшой скрипт для парсинга твитов с использованием библиотеки под названием Tweepy.
Создайте свою учетную запись разработчика Twitter
Первое, что нам понадобится, это учетная запись разработчика Twitter. Если у вас уже есть учетная запись Twitter, вам нужно перейти сюда, чтобы создать учетную запись разработчика.
После создания учетной записи разработчика вам нужно создать проект (или приложение, я создал проект, но предполагаю, что процедура такая же для приложения).
После создания проекта или приложения вам нужно сгенерировать 4 кода:
- CONSUMER_KEY
- CONSUMER_SECRET
- ACCESS_TOKEN
- ACCESS_TOKEN_SECRET
Храните эти коды в надежном месте, потому что нам они понадобятся на следующем шаге.
Tweepy
Tweepy - это библиотека, которую мы будем использовать для загрузки твитов с Twitter. Чтобы установить Tweepy, вы можете прочитать учебник написанный в документации.
Аутентификация
На этом этапе мы установили Tweepy и готовы написать некоторый код. Прежде всего, нам нужно настроить аутентификацию, мы должны предоставить секретные коды, которые мы получили на одном из предыдущих этапов, чтобы подключиться к Twitter и иметь возможность использовать API Twitter. Я создал отдельный файл с названием config.py, чтобы хранить 4 секретных строки. Я сделал это потому, что если я изменю секретные коды, мне нужно будет изменить их только один раз в одном файле, и будет легко опубликовать код на GitHub, игнорируя файл config.py.
Теперь мы можем начать писать наш парсер. Прежде всего, нам нужно импортировать необходимые библиотеки:
import tweepy
from config import consumer_key, consumer_secret, access_token, access_token_secret
Затем мы можем определить нашу функцию аутентификации:
def auth():
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
return api
В этом фрагменте кода мы получаем доступ к данным, которые мы поместили в файл config.py, и используем их для подключения к API Twitter.
Функция парсинга
Моя цель в данном случае - скачать все твиты, содержащие хэштег #Sanremo2021, поэтому я определил функцию "search_by_hashtag".
Эта функция принимает следующие параметры:
- api: Нам нужно это для выполнения всех вызовов к API Twitter, мы получаем это через функцию auth().
- date_since: Мы используем этот параметр, чтобы парсить только те твиты, опубликованные после "date_since".
- date_until: Мы используем этот параметр, чтобы парсить только те твиты, опубликованные до "date_until".
- words: Этот параметр определяет слова (в моем случае хэштег), которые должны присутствовать в твите, который мы парсим.
Вот код для функции search_by_hashtag:
Бонус — Как использовать этот парсер в контейнере Docker
В конце этой статьи я хочу кратко объяснить, как создать Docker-контейнер для этого парсера. Мне понадобилось поместить этот скрипт в контейнер Docker, чтобы использовать его на VPS. Прежде всего, поместите все созданные вами файлы в одну папку, а затем в этой же папке создайте файл с именем Dockerfile (без расширения) со следующими строками кода:
FROM python:3.8
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "./scraper.py" ]
Затем вам нужно создать еще один файл с именем docker-compose.yml, вставьте в него следующий код:
version: '3'
services:
scraper:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./data:/app/data
Для запуска скрипта вам просто нужно запустить контейнер с помощью команды:
docker-compose up -d