Парсим Тинькофф пульс

2 minute read

img

Пример

В данный статье мы рассмотрим возможность парсинга социальной сети для инвесторов “Тинькофф Пульс”.

Для сбора данных необходима python библиотека tpulse, установим её.

pip install tpulse --upgrade

Блок кода с примером сбром данных, возьмем последние 9000 постов по тикеру $TCSG.
В одном запросе содержатся 30 постов, переменная N = 300, итого ~9000.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

from tpulse import TinkoffPulse
from httpx import HTTPStatusError
from time import sleep


pulse = TinkoffPulse()

N = 300
cursor = 999999999
raw_data = []

KEYS = [
    "id",
    "nickname",
    "likesCount",
    "commentsCount",
    "inserted",
]

for _ in range(N):
    try:
        response = pulse.get_posts_by_ticker("TCSG", cursor)
        cursor = response["nextCursor"]
        posts = response["items"]
        for post in posts:
            data = {
                key: post[key] for key in KEYS
            }
            raw_data.append(data)
    except HTTPStatusError:
        pass
    sleep(0.25)

Преобразуем список в pandas DataFrame, приведем дату публикации к формату YYYY-MM-DD и посчитаем количество постов на дату.

base_df = pd.DataFrame(raw_data)
base_df['inserted'] = pd.to_datetime(base_df["inserted"].str[:10])
daily_counts = base_df.groupby('inserted').size().reset_index(name='count')

Далее построим обычный линейный график, который показывает количество постов на каждую дату из промежутка.

plt.figure(figsize=(15, 6))
plt.plot(daily_counts['inserted'], daily_counts['count'], marker='o', linestyle='-', color='r')

plt.xlabel('Дата')
plt.ylabel('Количество публикаций')
plt.title('График количества публикаций по дням')
plt.grid(True)
plt.show()

img

Добавим на верхний график линию тренда зеленого цвета.

plt.figure(figsize=(15, 6))
plt.plot(daily_counts['inserted'], daily_counts['count'], marker='o', linestyle='-', color='r', label='Количество публикаций')

plt.xlabel('Дата')
plt.ylabel('Количество публикаций')
plt.title('График количества публикаций по дням')
plt.grid(True)

x = np.arange(len(daily_counts))
y = daily_counts['count']

coefficients = np.polyfit(x, y, 1)
trend_line = np.polyval(coefficients, x)

plt.plot(daily_counts['inserted'], trend_line, linestyle='--', color='g', label='Линия тренда')

plt.legend()
plt.show()

img

Для разнообразия соберем чуть больше данных для тикера $FIVE, значение переменной N поменяем на 1000, итого получили ~50000 постов.

img

Похожие публикации

Сбор данных из социальной сети Тинькофф Пульс (python, sqlite3)
Тинькофф инвестиции пульс api wrapper
Популярные авторы Тинькофф Инвестиций (Пульс) торгуют в убыток
Web-сервис мониторинга доходности авторов Тинькофф Пульс
Как изменилась доходность инвесторов после открытия биржи

На пиво

Если данный материал оказался вам полезен - готов принять ваши копеечки :)

в крипте:
ETH (ERC20): 0xcdc3231527a1ad105d527678ccbcf5e827747e7b
TON: UQAiIMLC2_j9tPlmQakdbz2Zh0rkTHH7tK2RTcO3rYAkr8QV

в рублях: https://pay.cloudtips.ru/p/2a3d8e06

Telegram

Большое спасибо всем за внимание! Если вам интересны подобные рассуждения - подписывайтесь на мой канал artydev & Co.