Получаем данные из Пикабу для сбора статистики

В процессе обучения решил написать что-то полезное, дабы проверить, что я вообще могу. Почему бы не попарсить Пикабу? Поехали!



Само содержимое постов обрабатывать не будем по двум причинам:

1. Не нужно.

2. Слишком долго.

Даже обработка минимального количества данных за сутки занимает до 2х часов.


Список необходимых мне полей:

1. Статус поста

- может быть удален (в корзине)

- обычный пост


2. ID поста

У каждого поста на Пикабу есть свой уникальный ID (номер)


3. Дата публикации, день недели, время.


4. Принадлежность к сообществу

Название сообщества , если пост в сообществе


5. Заголовок


6. Автор


7. Рейтинг


8. Спец. теги

"Моё" или "Клубника" если имеются.


9. Обычные теги

У меня теги идут одной строкой, если есть необходимость можно сохранять их отдельными элементами.



ATTENTION! ЕСЛИ ТЫ ОПЫТНЫЙ И ХОРОШИЙ ПРОГРАММИСТ, ТО У ТЕБЯ МОЖЕТ ПОЙТИ КРОВЬ ИЗ ГЛАЗ, Т.К. ТС ПОКА УЧИТСЯ И ГОВНОКОДИТ.


Для начала нам нужно задать интервал обработки.

Первое что приходит в голову - открыть ленту за нужную дату и скролить ее, используя в качестве маркеров начала и конца заданные даты.


Тут появляется две проблемы:


1. В общей ленте не отображаются

- посты со слишком низким рейтингом

- посты в корзине

- посты из закрытых сообществ


2. Рекламные посты. Их структура отличается от обычных  публикаций. Если мы попробуем обработать их по схеме пользовательских постов, это вызовет ошибки.


Значит применим другой подход: будем "прыгать" по постам используя уникальный ID.

На картинке ниже приведена схема определения интервала обработки.


Логика простая. Например: нам нужно получить информацию за 15 ноября.


Если вы откроете ленту за любую дату, то обратите внимание, что в самом верху будет самый последний пост за эту дату. Эту особенность мы и используем.


Программа заходит в ленту за дату предыдущую 15 ноября (14 ноября) , считывает ID самого последнего поста в ленте, передает ее в метод, который  начинает последовательно заходить в посты, увеличивая полученный ID на единицу и сверять дату. В качестве маркера выступает дата 15.ноября. Как только программа натыкается на пост с датой 15 ноября, она записывает его ID. Это наша точка начала.


Аналогично происходит и с конечной точкой, только мы берем ID последнего поста в ленте за 15 ноября, последовательно переходим по постам пока не изменится дата, и сохраняем ID последнего поста перед тем, как дата изменилась.


В итоге мы получили интервал ID, с которым можно работать.

Получаем данные из Пикабу для сбора статистики Java7, Программирование, Быдлокодинг, Длиннопост

Код поиска первого и последнего ID для интересующихся. Посты с рекламой 404 игнорируются

Получаем данные из Пикабу для сбора статистики Java7, Программирование, Быдлокодинг, Длиннопост
Получаем данные из Пикабу для сбора статистики Java7, Программирование, Быдлокодинг, Длиннопост

Сам код парсера. Инфу засовываю все MySQL.

Получаем данные из Пикабу для сбора статистики Java7, Программирование, Быдлокодинг, Длиннопост
Получаем данные из Пикабу для сбора статистики Java7, Программирование, Быдлокодинг, Длиннопост

GatewaySQL

Получаем данные из Пикабу для сбора статистики Java7, Программирование, Быдлокодинг, Длиннопост

Надеюсь кому-то было полезно. На вопросы отвечу в комментах

Автор поста оценил этот комментарий
2. Слишком долго.
раскрыть ветку
1
Автор поста оценил этот комментарий
Зачем?
раскрыть ветку
Автор поста оценил этот комментарий

За такое можно и в бан на пикабу подсесть.

Мини ддос получается так то )

раскрыть ветку