CoderCastrov logo
CoderCastrov
Docker

Как парсить твиты с использованием Tweepy

Как парсить твиты с использованием Tweepy
просмотров
3 мин чтение
#Docker

В прошлый вторник начался "Фестиваль итальянской музыки Санремо". Санремо - это крупнейший итальянский музыкальный фестиваль. Во время последнего шоу я услышал, что первый эпизод стал самым комментируемым в социальных сетях за всю историю.

Эта новость сразу дала мне идею, почему бы не спарсить твиты с хэштегом #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