Что такое парсер профилей
Что такое парсинг и как правильно парсить
Что такое парсинг данных должен знать каждый владелец сайта, планирующий серьёзно развиваться в бизнесе. Это явление настолько распространено, что рано или поздно с парсингом может столкнуться любой. Либо как заказчик данной операции, либо как лицо, владеющее объектом для сбора информации, то есть ресурсом в Интернете.
К парсингу в российской бизнес-среде часто наблюдается негативное отношение. По принципу: если это не незаконно, то уж точно аморально. На самом деле из его грамотного и тактичного использования каждая компания может извлечь немало преимуществ.
Что такое парсинг
Глагол “to parse” в дословном переводе не означает ничего плохого. Делать грамматический разбор или структурировать — действия полезные и нужные. На языке всех, кто работает с данными на сайтах это слово имеет свой оттенок.
Парсить — собирать и систематизировать информацию, размещенную на определенных сайтах, с помощью специальных программ, автоматизирующих процесс.
Если вы когда-либо задавались вопросом, что такое парсер сайта, то вот он ответ. Это программные продукты, основной функцией которых является получение необходимых данных, соответствующих заданным параметрам.
Законно ли использовать парсинг
После выяснения что такое парсинг, может показаться, что это нечто, не соответствующее нормам действующего законодательства. На самом деле это не так. Законом не преследуется парсинг. Зато запрещены:
Парсинг законен, если он касается сбора информации, находящейся в открытом доступе. То есть всего, что можно и так собрать вручную.
Парсеры просто позволяют ускорить процесс и избежать ошибок из-за человеческого фактора. Поэтому «незаконности» в процесс они не добавляют.
Другое дело, как владелец свежесобранной базы распорядится подобной информацией. Ответственность может наступить именно за последующие действия.
Для чего нужен парсинг
Что такое парсить сайт разобрались. Переходим к тому, зачем же это может понадобиться. Здесь открывается широкий простор для действий.
Основная проблема современного Интернета — избыток информации, которую человек не в состоянии систематизировать вручную.
Парсинг используется для:
Сквозная аналитика — это тоже своеобразный парсинг, только рекламы и продаж. Система интегрируется с площадками и CRM, а потом автоматически соединяет данные о бюджетах, кликах, сделках и подсчитывает окупаемость каждой кампании. Используйте ее, чтобы не потеряться в большом количестве информации и видеть в отчетах то, что вам действительно нужно. Отчеты Calltouch легко кастомизировать под себя и задачи команды маркетологов.
Сквозная аналитика
Достоинства парсинга
Они многочисленны. По сравнению с человеком парсеры могут:
Ограничения при парсинге
Есть несколько вариантов ограничений, которые могут затруднить работу парсера:
Какую информацию можно парсить
Спарсить можно всё, что есть на сайте в открытом доступе. Чаще всего требуются:
Изображения с сайтов технически спарсить тоже можно, но, как уже упоминалось выше, если они защищены авторским правом, лучше не нужно. Нельзя собирать с чужих сайтов личные данные их пользователей, которые те вводили в личных кабинетах.
Парсинг часто используется в индустрии e-commerce. Оценить влияние парсинга и его результатов можно в сквозной аналитике для интернет-магазинов. Вам доступны отчеты по любым временным срезам, метрикам и товарам. С помощью этих данных вы узнаете, из каких источников вы получаете добавления в корзины и продажи, и сможете оптимизировать рекламу с опорой на эти данные.
Модуль е-коммерс
Алгоритм работы парсинга
Принцип действия программы зависит от целей. Но схематично он выглядит так:
Способы применения
Основных способов применения парсинга существует два:
Обычно оба варианта работают в тесной связке друг с другом. Например, анализ ценовых позиций у конкурентов отталкивается от имеющегося диапазона на собственном сайте, а обнаруженные новинки сопоставляются с собственной товарной базой и т. п.
10 лучших парсеров Инстаграм: платные и бесплатные (2021)
В этой статье вы узнаете:
Все советы и сервисы, перечисленные в статье, актуальны в 2021 году.
Что такое парсеры в Инстаграм?
Парсер — это инструмент для поиска целевой аудитории в Инстаграм по разным параметрам: геолокация, хештеги, подписчики конкурентов, пол, возраст. Функция парсинга есть в специальных онлайн-сервисах, которые специализируются на продвижении в социальных сетях.
Все действия выполняются автоматически: вы задаете нужные параметры поиска (пол, теги, конкурентов), после чего программа или облачный сервис начинает искать ЦА. В дальнейшем можно взаимодействовать с собранной аудиторией: подписываться и ставить лайки, комментировать посты, смотреть истории, отправлять сообщения в Директ.
Это интересно: есть онлайн-сервисы, которые предоставляют возможность парсить аудиторию из других социальных сетей. Например, можно загрузить список Instagram-пользователей из Вконтакте.
Еще одна полезная функция парсеров — фильтрация аудитории. Вы можете установить фильтры, чтобы отсечь ботов и коммерческие страницы: например, указать, чтобы у пользователей была загружена аватарка.
ТОП-10 парсеров в Инстаграм
Теперь перейдем к основной части статьи. Давайте рассмотрим 9 лучших парсеров в Инстаграм. Они помогут быстро найти целевую аудиторию: без ботов и коммерческих аккаунтов.
Zengram Parser
Zengram Parser — сервис для сбора списков пользователей и их данных из Инстаграма. Парсер поможет в продвижении аккаунта: например, вы можете собрать список пользователей и запустить массфолловинг и масслайкинг.
Сервис платный. Но есть пробный пакет за 1 рубль. В пробной версии Zengram Parser можно собрать 3 000 аккаунтов.
Instatracker
Instatracker — простой и удобный сервис для сбора горячей и «живой» аудитории. Инструмент находит свежих подписчиков по аккаунтам конкурентов, хештегам и геолокации.
Instaplus
Instaplus — автоматизированный сервис для продвижения в Инстаграме. Инструмент работает в облачном режиме. Начать поиск целевой аудитории и раскрутку профиля можно с планшета, компьютера, смартфона.
Tooligram
Tooligram — профессиональный сервис для раскрутки Instagram-аккаунтов. Он работает в режиме онлайн — не нужно скачивать и устанавливать дополнительный софт для ПК.
Сервис платный. Есть бесплатный пробный период.
Pepper.Ninja
Pepper.Ninja — это онлайн-парсер, который помогает найти целевую аудиторию во Вконтакте. Но, несмотря на это, инструмент можно использовать для Instagram.
Сервис предоставляет новым пользователям тестовый период на 3 дня.
Segmento Target
Segmento Target — онлайн-сервис для сбора целевой аудитории в социальных сетях. Инструмент работает с тремя площадками: Instagram, VK и OK.
Для тестирования функций Segmento Target можно получить бесплатный доступ к сервису.
SocialKit
SocialKit — программа для раскрутки в Инстаграм. Подходит для продвижения любых профилей: страницы брендов, интернет-магазины, персональные аккаунты, блогеры.
Для тестирования основных функций программы можно скачать Demo-версию.
Bridgit
Bridgit — это инструменты для работы с Instagram. Подходит для продвижения любых аккаунтов.
В Bridgit есть бесплатный тестовый период, который активируется после регистрации в системе.
Instaplus.pro
Instaplus.pro — сервис для безопасной раскрутки аккаунтов в Инстаграм. Инструмент позволяет привлекать только живую аудиторию.
Новые пользователи могут попробовать сервис Instaplus.pro бесплатно.
InstaTurbo
InstaTurbo — облачный сервис для безопасного продвижения в Instagram. Инструмент позволяет привлекать до 300 клиентов в день.
Стоимость: 890 рублей в месяц. Есть бесплатный пробный период.
Итоги
Мы рассмотрели лучшие парсеры в Инстаграм. Выбирайте любой понравившийся сервис из списка. Мы в свою очередь рекомендуем Zengram Parser, так как он максимально простой и удобный.
Что такое парсер и как он работает
Чтобы поддерживать информацию на своем ресурсе в актуальном состоянии, наполнять каталог товарами и структурировать контент, необходимо тратить кучу времени и сил. Но есть утилиты, которые позволяют заметно сократить затраты и автоматизировать все процедуры, связанные с поиском материалов и экспортом их в нужном формате. Эта процедура называется парсингом.
Давайте разберемся, что такое парсер и как он работает.
Что такое парсинг?
Начнем с определения. Парсинг – это метод индексирования информации с последующей конвертацией ее в иной формат или даже иной тип данных.
Парсинг позволяет взять файл в одном формате и преобразовать его данные в более удобоваримую форму, которую можно использовать в своих целях. К примеру, у вас может оказаться под рукой HTML-файл. С помощью парсинга информацию в нем можно трансформировать в «голый» текст и сделать понятной для человека. Или конвертировать в JSON и сделать понятной для приложения или скрипта.
Но в нашем случае парсингу подойдет более узкое и точное определение. Назовем этот процесс методом обработки данных на веб-страницах. Он подразумевает анализ текста, вычленение оттуда необходимых материалов и их преобразование в подходящий вид (тот, что можно использовать в соответствии с поставленными целями). Благодаря парсингу можно находить на страницах небольшие клочки полезной информации и в автоматическом режиме их оттуда извлекать, чтобы потом переиспользовать.
Ну а что такое парсер? Из названия понятно, что речь идет об инструменте, выполняющем парсинг. Кажется, этого определения достаточно.
Какие задачи помогает решить парсер?
При желании парсер можно сподобить к поиску и извлечению любой информации с сайта, но есть ряд направлений, в которых такого рода инструменты используются чаще всего:
Серый парсинг
Такой метод сбора информации не всегда допустим. Нет, «черных» и полностью запрещенных техник не существует, но для некоторых целей использование парсеров считается нечестным и неэтичным. Это касается копирования целых страниц и даже сайтов (когда вы парсите данные конкурентов и извлекаете сразу всю информацию с ресурса), а также агрессивного сбора контактов с площадок для размещения отзывов и картографических сервисов.
Но дело не в парсинге как таковом, а в том, как вебмастера распоряжаются добытым контентом. Если вы буквально «украдете» чужой сайт и автоматически сделаете его копию, то у хозяев оригинального ресурса могут возникнуть вопросы, ведь авторское право никто не отменял. За это можно понести реальное наказание.
Добытые с помощью парсинга номера и адреса используют для спам-рассылок и звонков, что попадает под закон о персональных данных.
Где найти парсер?
Добыть утилиту для поиска и преобразования информации с сайтов можно четырьмя путями.
При отсутствии разработчиков в штате я бы советовал именно десктопную программу. Это идеальный баланс между эффективностью и затратами. Но если задачи стоят не слишком сложные, то может хватить и облачного сервиса.
Плюсы парсинга
У автоматического сбора информации куча преимуществ (по сравнению с ручным методом):
Так что нет никакого смысла «парсить» руками, когда можно доверить эту операцию подходящему ПО.
Минусы парсинга
Главный недостаток парсеров заключается в том, что ими не всегда удается воспользоваться. В частности, когда владельцы чужих сайтов запрещают автоматический сбор информации со страниц. Есть сразу несколько методов блокировки доступа со стороны парсеров: и по IP-адресам, и с помощью настроек для поисковых ботов. Все они достаточно эффективно защищают от парсинга.
В минусы метода можно отнести и то, что конкуренты тоже могут использовать его. Чтобы защитить сайт от парсинга, придется прибегнуть к одной из техник:
Но все методы защиты легко обходятся, поэтому, скорее всего, придется с этим явлением мириться.
Алгоритм работы парсера
Парсер работает следующим образом: он анализирует страницу на наличие контента, соответствующего заранее заданным параметрам, а потом извлекает его, превратив в систематизированные данные.
Процесс работы с утилитой для поиска и извлечения найденной информации выглядит так:
Естественно, процедура парсинга через специализированное ПО описана лишь в общих чертах. Для каждой утилиты она будет выглядеть по-разному. Также на процесс работы с парсером влияют цели, преследуемые пользователем.
Как пользоваться парсером?
На начальных этапах парсинг пригодится для анализа конкурентов и подбора информации, необходимой для собственного проекта. В дальнейшей перспективе парсеры используются для актуализации материалов и аудита страниц.
При работе с парсером весь процесс строится вокруг вводимых параметров для поиска и извлечения контента. В зависимости от того, с какой целью планируется парсинг, будут возникать тонкости в определении вводных. Придется подгонять настройки поиска под конкретную задачу.
Иногда я буду упоминать названия облачных или десктопных парсеров, но использовать именно их необязательно. Краткие инструкции в этом параграфе подойдут практически под любой программный парсер.
Парсинг интернет-магазина
Это наиболее частый сценарий использования утилит для автоматического сбора данных. В этом направлении обычно решаются сразу две задачи:
В первом случае стоит воспользоваться утилитой Marketparser. Указать в ней код продукта и позволить самой собрать необходимую информацию с предложенных сайтов. Большая часть процесса будет протекать на автомате без вмешательства пользователя. Чтобы увеличить эффективность анализа информации, лучше сократить область поиска цен только страницами товаров (можно сузить поиск до определенной группы товаров).
Во втором случае нужно разыскать код товара и указать его в программе-парсере. Упростить задачу помогают специальные приложения. Например, Catalogloader – парсер, специально созданный для автоматического сбора данных о товарах в интернет-магазинах.
Парсинг других частей сайта
Принцип поиска других данных практически не отличается от парсинга цен или адресов. Для начала нужно открыть утилиту для сбора информации, ввести туда код нужных элементов и запустить парсинг.
Разница заключается в первичной настройке. При вводе параметров для поиска надо указать программе, что рендеринг осуществляется с использованием JavaScript. Это необходимо, к примеру, для анализа статей или комментариев, которые появляются на экране только при прокрутке страницы. Парсер попытается сымитировать эту деятельность при включении настройки.
Также парсинг используют для сбора данных о структуре сайта. Благодаря элементам breadcrumbs, можно выяснить, как устроены ресурсы конкурентов. Это помогает новичкам при организации информации на собственном проекте.
Обзор лучших парсеров
Далее рассмотрим наиболее популярные и востребованные приложения для сканирования сайтов и извлечения из них необходимых данных.
В виде облачных сервисов
Под облачными парсерами подразумеваются веб-сайты и приложения, в которых пользователь вводит инструкции для поиска определенной информации. Оттуда эти инструкции попадают на сервер к компаниям, предлагающим услуги парсинга. Затем на том же ресурсе отображается найденная информация.
Преимущество этого облака заключается в отсутствии необходимости устанавливать дополнительное программное обеспечение на компьютер. А еще у них зачастую есть API, позволяющее настроить поведение парсера под свои нужды. Но настроек все равно заметно меньше, чем при работе с полноценным приложением-парсером для ПК.
Наиболее популярные облачные парсеры
Похожих сервисов в сети много. Причем как платных, так и бесплатных. Но вышеперечисленные используются чаще остальных.
В виде компьютерных приложений
Есть и десктопные версии. Большая их часть работает только на Windows. То есть для запуска на macOS или Linux придется воспользоваться средствами виртуализации. Либо загрузить виртуальную машину с Windows (актуально в случае с операционной системой Apple), либо установить утилиту в духе Wine (актуально в случае с любым дистрибутивом Linux). Правда, из-за этого для сбора данных потребуется более мощный компьютер.
Наиболее популярные десктопные парсеры
Это наиболее востребованные утилиты для парсинга. У каждого из них есть демо-версия для проверки возможностей до приобретения. Бесплатные решения заметно хуже по качеству и часто уступают даже облачным сервисам.
В виде браузерных расширений
Это самый удобный вариант, но при этом наименее функциональный. Расширения хороши тем, что позволяют начать парсинг прямо из браузера, находясь на странице, откуда надо вытащить данные. Не приходится вводить часть параметров вручную.
Но дополнения к браузерам не имеют таких возможностей, как десктопные приложения. Ввиду отсутствия тех же ресурсов, что могут использовать программы для ПК, расширения не могут собирать такие огромные объемы данных.
Но для быстрого анализа данных и экспорта небольшого количества информации в XML такие дополнения подойдут.
Наиболее популярные расширения-парсеры
Вместо заключения
На этом и закончим статью про парсинг и способы его реализации. Этого должно быть достаточно, чтобы начать работу с парсерами и собрать информацию, необходимую для развития вашего проекта.
Парсинг Instagram в промышленных масштабах
В декабре 2020 года я завершил работать в научном институте и сразу же увлёкся задачей добычи данных из соцсетей, в частности из Инстаграма. Прежде я работал только с готовыми данными, поэтому мне всегда было интересно, как эти данные можно добывать. За несколько дней до Нового Года я написал достаточно базовую статью про то как парсить Инст. В первых числах января мне написал заказчик и попросил сделать для него масштабный парсер инстаграма, который был бы способен делать более 10.000 запросов в сутки.
С тех пор прошло уже больше полугода, за которые я набил всевозможные шишки в данной области и написал промышленный парсер, который способен делать сотни тысяч, если не миллионы запросов в сутки.
В рамках данной статьи я хочу рассказать про путь развития своего Pet-Project в потенциально мощный и серьёзный инструмент. Впереди вас ждёт увлекательное путешествие от хранения данных в простых Json-ах на жестком диске сервера, до облачной базы данных и автоматической инициализации cron расписания запуска процессов внутри докер контейнера, поехали!
Ещё немного занудства
Какую задачу я решал?
Сразу после написания первой статьи, ко мне обратился заказчик с вопросом, смогу ли я извлекать из инстаграмма данные о том, как пользователи обмениваются лайками.
Задача была следующая. Дана группа пользователей (несколько тысяч), необходимо в режиме реального времени отслеживать, как они ставят лайки друг другу. То есть собирать лайки, которые пользователи из выбранной группы ставят внутри этой группы, и отдавать эту информацию в виде «потока лайков» в стандартизированном виде.
Далее эти лайки должны «копироваться» в блокчейн VIZ, чтобы инстаграмеры не просто так лайкали друг друга, а получали цифровой социальный капитал. Впрочем, этой частью сервиса занимались специалисты на стороне заказчика.
Каким образом я её решал
Да, как вы ещё не раз убедитесь в процессе чтения, я люблю всё структурировать, поэтому ниже список разделов этой статьи:
Принцип майнинга данных из инстаграмма с помощью одного аккаунта, какие ограничения на это есть.
Каким образом можно распаралелить процесс извлечения данных на несколько исполнителей (Vanilla подход).
Как распаралелить процесс, но уже по-крупному. Переход от локальных баз данных к облачным.
Архитектура получившейся облачной базы данных (Firebase Realtime Databasse).
Оркестрирование процессов или как сделать так, чтобы всё работало параллельно и не сломалось.
Вычисление активной аудитории профиля в Инстаграм, создание кластера активных пользователей и его уплотнение.
Как я делал расписание процессов. Некоторая магия и танцы с бубном вокруг докера и crontab.
Логи + облачная база данных.
Полезные ссылки (API Instagram, прокси сервис, биржа аккаунтов инстаграм)
Outro + Размышления о будущем проекта.
Если вдруг вы специалист в области инстаграмма, работаете с рекламой, то мне очень интересно услышать ваше мнение, какие именно данные из Инстаграма вам нужны и какое дальнейшее коммерческое развитие может быть у моего проекта.
Для начала предлагаю освежить в памяти, каким образом можно получить открытые данные из Инстаграма.
А как вообще доставать данные, Recap
Во многом, на этот вопрос отвечает моя первая, максимально базовая статья (это чтобы вы не листали наверх в поисках ссылки).
Если кратко, то я использовал библиотеку на питоне, которая извлекает данные путём отправления запросов к неофициальному API инстаграмма. Есть множество библиотек, работающих таким образом. В своём проекте я использовал instagrapi, пожалуй самую современную и удобную библиотеку.
Что такое неофициальное API инстаграма
Если кратко, то неофициальное API притворяется приложением Инстаграм на андроиде и в шапке запроса прописывает свои специальные плюшечки, сигнатуры и всякое прочее, почитать больше про то как работают запросы к API можно тут.
В начале разработки промышленного парсера я создал новый аккаунт в инстаграме, подписался на пару своих друзей и начал активно исследовать пропускной канал такого метода «добычи данных».
К моему огорчению, разработчики инстаграмма создали ряд инструментов, препятствующих безграничной выкачке данных. И после серии запросов аккаунт, через который проводятся запросы, банится. Особенно, Инстаграмм банит за периодические запросы, между которыми небольшая разница во времени, то есть когда очевидно, что эти действия производятся алгоритмом.
Не более 150 запросов в день с одного аккаунта.
Добавить стохастчность во временные промежутки между запросами (например, sleep на рандомный промежуток времени).
Делать запросы разного типа (то есть, например, не только получение лайков для поста, но и просмотр подписчиков).
Разобрались с тем, как проводить запросы с одного аккаунта. Дальше необходимо понять, как организовать параллельную работу группы аккаунтов.
Vanila подход к распараллеливанию
На 150 запросах в день далеко не уедешь, надо что-то придумывать. В самом начале я подумал: «подержите моё пиво, я проходил параллельное программирование в вузе». Так начинается новая глава моего повествования.
Передо мной стояла задача организовать параллельный асинхронный процесс добычи данных несколькими исполнителями.
Процессы исполнители и процесс менеджер я планировал запускать по расписанию с помощью какой-нибудь специализированной утилиты (однако в итоге сделал монстра из докера и crontab).
Стыдно даже рассказывать, с чего я начал, но раз уж пообещал повествование про свой путь, то дерзайте. Начинал я с крайне примитивного подхода в виде хранения данных в json на жестком диске. То есть исполнители получали задание в формате json файла со специальным названием, соответствующим исполнителю, делали необходимые запросы, и затем процесс менеджер собирал результаты работы в один большой json файл.
Достаточно быстро я понял, что такая схема работы выглядит уж больно криво и костыльно и без какой-нибудь базы данных мне не обойтись.
Костыльное решение
База данных, Firebase Realtime Database
Мне не хотелось разбираться со сложными базами данных и с SQL, так как это чрезмерно затянуло бы процесс разработки. Благо, мои партнёры по веб студии, молодые и заряженные ребята, подсказали мне продвинутый стек разработки. В частности меня познакомили с Firebase Realtime Database, сервисом компании Google, созданным для упрощения процесса разработки приложений. Представьте себе, NO SQL облачная база данных, доступная из любой точки мира, где есть интернет.
Прежде я писал про то, как «поженить» Firebase Realtime Database и Телеграм ботов. Тут можно почитать про основы работы с этой базой даных.
Основными преимуществами такой базы данных для меня было то, что все данные в ней хранятся в виде json дерева и то, что интерфейс взаимодействия с ней выглядит максимально просто. И что это всё работает с моим любимым питоном! (Python Firebase SDK). Во многом, помочь разобраться с базой данных мне помог этот туториал.
Прежде чем интегрировать новую для меня технологию в серьёзный проект я начал с «игрушечного проекта» (Да, Pet Project внутри Pet Project) и интегрировал Realtime Database в моего телеграмм бота, который делает синтаксический анализ предложений. Он был сделан в рамках другого моего проекта и там была необходимость запоминать предложения, на которых алгоритм работает плохо.
На нынешнем этапе обрезка работает достаточно просто и зачастую падает для сложных предложений. Однако дерево строится в большинстве случаев.
Архитектура БД
Основу этой архитектуры я придумал за один продуктивный вечер где-то в начале марта, расслаблено программируя с бокальчиком вина (а потом уже и с бутылкой). Впоследствии я добавлял некоторые коллекции и разделы для более эффективной работы системы, либо для более гибкой её настройки.
Начнём с самых базовых структур, которые я использовал в этом проекте
User
Post
Ноль в last_check означает что пост ещё ни разу не был проверен.
Стоит отметить, что в post.likes хранятся в принципе все лайки оставленные под постом (то есть не только внутри нашей базы данных).
Также стоит отметить, что никакое API инстаграмма, даже самое продвинутое и хакерское не отдает больше 999 лайков для поста.
Если на посте больше 999 лайков, то будут отданы 999 некоторых лайков из всех (при этом нигде нет гарантии, что это будут 999 последних лайков).
Like
Коллекции
В корневом разделе базы данных Firebase Realtime Database хранится 6 коллекций (6 корневых разделов).
Executors
Данная структура хранит в себе все конфигурационные данные, необходимые для сбора лайков и добавления новых постов.
Сбор лайков может вестись параллельно и асинхронно несколькими исполнителями.
Executor Configs
Конфигурационный файл исполнителя:
Last Login Log
Лог последней авторизации в случае успеха имеет вид
Settings Dict
Конфигурация API исполнителя. Содерджит в себе куки файл для более удобной авторизации (и менее опасной с точки зрения потенциальной возможности бана аккаунта).
Пример для купленного аккаунта (обфусцированный). Такой объект генерируется во время первой авторизации.
Оркестрирование процессов
Разобрались с облачной базой данных (Если вы ещё не разобрались, то обязательно разберитесь, почитайте туториалы, уж очень классная штука). Теперь необходимо понять, как правильно использовать её для организации процесса майнинга данных группой аккаунтов.
Как любил говорить мой любимый преподаватель по программированию: «Разделяй и властвуй». Стараюсь придерживаться этого принципа. В инстаграме лайки имеют смысл только в контексте постов, на которые они были поставлены. Поэтому наша задача может быть разбита на две подзадачи:
Держать актуальной базу постов, выложенных пользователями
Держать актуальной мини базу лайков для каждого поста
Алгоритм работы процесса исполнителя выглядит следующим образом:
Процесс запускается по расписанию (про расписание будет отдельный раздел).
Логинится в аккаунт инстаграмма, используя при этом своё прокси (SOCKS5).
Случайным образом выбирает действие. Чтобы действия не были сильно похожи на действия робота. Исполнитель либо делает запрос на новые посты пользователя, либо на новые лайки, либо совершает случайное действие (лайк, посмотреть коменты, посмотреть подписчиков), либо вообще отдыхает.
Случайным образом выбирает индекс пользователя из соответствующего ему диапазона индексов.
Получает из облачной базы данных нынешнюю запись (будь это пост или пользователь).
Проводит запрос к Инстаграму.
Проверяет, изменились ли данные, если изменились, то обновляет запись в облачной базе данных.
Если действие было собрать новые лайки и на посте оказались новые лайки, то исполнитель выгружает новые лайки в облачную базу данных. Это необходимо чтобы поток лайков был в режиме реального времени. Исполнитель добавляет в облачную базу данных только лайки пользователей из базы пользователей. База идентификаторов пользователей хранится в виде json файла на сервере и обновляется раз в несколько часов.
Таким образом, у каждого исполнителя есть свой диапазон индексов в базе данных пользователей. У каждого пользователя есть идентификаторы опубликованных им постов. Также, у некоторых частей базы данных есть флаги блокировки, когда эту часть бд меняет процесс менеджер.
Вырезка из документации касательно оркестрирования.
Раз в несколько часов происходит перераспределение диапазонов индексов между исполнителями. Это нужно для того, чтобы минимизировать влияние заблокированных аккаунтов. Эта функция называется normalize_executors_split
Балансировка оркестрирования
Для улучшения процесса обработки баз данных была реализована балансировка оркестрирвоания
По расписанию (напр. раз в день) crontab запускает процесс-менеджер, который сортирует users_database по параметру last_check
Пользователи, которые не были проверены дольше всех, помещаются в специальную приоритетную очередь
normalize_split
Уплотнение кластера пользователей
Изначальную базу пользователей я решил брать с университетских кластеров пользователей. Делал я это следующим образом (да, я люблю списки).
Я брал несколько самых популярных университетских аккаунтов в инстаграме.
Для каждого аккаунта получал идентификаторы последних 20 постов.
Выкачивал все лайки для этих постов.
Для каждого пользователя, поставившего лайк считал суммарное количество лайков, которое он поставил на эти 20 постов.
Добавлял в свою базу пользователей тех, кто поставил N > 4 лайков (варьируемый параметр, я экспериментировал).
Интересный инсайт: Как оказалось, студенты МФТИ не так охотно ставят лайки друг другу в инстаграме, поэтому мой итоговый кластер состоял из студентов МГУ и ВШЭ (привет паблик hsemem).
Коммерческое предложение: Да, если меня читают товарищи таргетологи, то обязательно напишите мне, потому что вам ведь что-то похожее нужно для анализа аудитории? Я как раз планирую сделать сервис, который бы на базе нескольких аккаунтов схожей тематики выдавал бы их активную аудиторию.
manager — процесс для менеджмента системы.
Алгоритм работы следующий:
Загрузка всей базы данных пользователей и базы данных постов
Проставление пользователям количества лайков, которое они отдали внутри базы данных
Сбор всех лайков, поставленных внутри базы данных. Загрузка всех лайков в облачную базу данных
Перераспределение диапазонов индексов пользователей между исполнителями ( normalize_executors_split )
Балансировка оркестрирования ( choose_top_users_to_fetch )
Сохранение всех баз данных локально
manage_cluster — процесс уплотнения или расширения кластера (в зависимости от параметров)
Для увеличения связности базы данных пользователей раз в определенный промежуток времени запускается процесс, отсеивающий малоактивных пользователей и добавляющий пользователей активных (которые еще не в базе данных).
В облачной базе даных в разделе executors/cluster есть два параметра, влияющих на процесс формирования кластера.
ADD_FRACTION доля пользователей, которые добавляются (доля от текущего размера базы данных пользователей
Алгоритм работы процесса следующий:
Загрузка всей базы данных пользователей и базы данных постов.
Для каждого пользователя вычисляется количество лайков, которое они отдали внутри базы данных.
Пользователи сортируются по количеству лайков, поставленных внутри базы данных. Затем оставляется доля самых активных пользователей (от нынешнего количества пользователей внутри базы даных), равная REMAIN_FRACTION (число от 0 до 1).
Для каждого пользователя, поставившего лайк на пост, который есть в нашей, уже очищенной, базе данных также вычисляется суммарное количество лайков, которое они поставили пользователям внутри базы данных.
Эти пользователи также сортируются по количеству поставленных ими лайков. После чего в базу данных добавляется доля пользователей равная ADD_FRACTION (имеется ввиду доля от нынешнего количества пользователей внутри базы даных).
Затем запускается перераспределение диапазонов индексов пользователей между исполнителями ( normalize_executors_split ).
Расписание процессов
Значимой частью этого проекта, его безусловным сердцем, является логика запуска процессов по расписанию. Где-то внутри меня сидит бунтарь, которому постоянно хочется хардкора, поэтому расписание процессов я делал внутри докер контейнера с помощью crontab. Более того, конфигурационный файл crontab внутри докера постоянно синхронизируется с облачной базой данных. Когда я продумывал всю эту архитектуру я, безусловно, представлял себя вождём шаманов, совершающим некое таинство.
Воображаемый вождь шаманов
В файле crontab_config всего одна прекрасная строчка, которая вызывала процесс сборки файла с расписанием на базе данных в облачной базе данных. В результате получался файлик в 100 с чем-то строчек.
Как выглядел мой crontab файл
В результате получалась такая вот красота, не пугайтесь. sleep в командах исполнителей нужно чтобы процессы не запускались одновременно.
Создаваемый конфигурационный файл зависит от параметров, находящихся внутри раздела crontab в облачной базе данных.
Алгоритм работы следующий:
Из облачной базы данных подгружаются параметры формирующие расписание.
Создается текстовый файл, содержащий комманды для системной утилиты crontab.
С помощью os.system() вызывается команда установки конфигурационного файла внутрь докер контейнера.
Я посчитал важным сделать красивые и адекватные логи, поэтому их я также сохранял в облачную базу даных, что оказалось очень удобно. На базе логов, хранящихся в таком формате можно сделать, например, Телеграм бота, который по запросу будет присылать отчёт по успешности выполненных запросов и анализировать самые часто встречающиеся проблемы.
В структуре tasks_log хранятся логи, описывающие результат работы каждого запроса каждого исполнителя.
где каждый task_log имеет вид
в случае неуспеха task_log.payload имеет вид
Что ещё я использовал в проекте, полезные ссылки
Неофициальное API инстаграмма
Проблемка с нынешней версией сервиса
На момент написания статьи у данная библиотека имеет версию 1.9.13. В данной версии кроется коварная ошибка, которая, впрочем, достаточно просто чинится.
Кто-то просто забыл убрать строчку в 43й строке. Просто убираем скобочку и всё работает.
Прокси
Достаточно важный элемент данного проекта — это группа прокси, которые я использовал. Для каждого аккаунта у меня было своё уникальное прокси.
В своём проекте я использовал сервис webshare. Я взял 100 прокси, что стоило мне 2.75$ в месяц. Этот сервис я использовал и для других своих проектов, так что рекомендасьон.
Статистика использования прокси по моему проекту
Аккаунты в Instagram
Как я уже ранее упоминал, аккаунты инстаграмма у меня покупные. Никакого криминала, я брал самые простые и дешёвые автореги, они стоят примерно по 12 рублей за штуку. Вот и вот примеры бирж, на них много разных продавцов. Прежде чем покупать «большую котлету» аккаунтов, советую брать штучек по 10 на пробу и смотреть насколько они живучие. Если вдруг возниктут какие-то трудности с указанными ранее биржами, то другие такие биржи гуглятся по запросу: «Аккаунты Инстаграм авторег купить».
Outro + Будущее проекта
Чтобы не перегружать и без того уже внушительных размеров статью я оставил некоторые детали за кадром. Так например, к этому проекту прилагалось API, которое отдавало лайки по запросу за промежуток времени. Возможно, я ещё вернусь и допишу про этот проект позже. Сейчас же я хочу обсудить его потенциально будущее.
410 WEB
Последние несколько месяцев, в рамках своего Digital агенства, я достаточно плотно занимаюсь проектами так или иначе связанными с Digital Marketing. Насколько мне известно, достаточно часто возникает задача выкачки аудитории с нескольких инстаграмм профилей со схожей семантикой. Так вот, мой парсер позволяет выкачивать не просто аудиторию, а брать сразу самую активную, которая ставит лайки и оставляет комментарии. Так что, специалисты в области Инстаграм, жду обратной связи от вас, нужно ли вам такое; потому что я планирую упаковать свой бэкенд в полноценный сервис.
И да, в будущем планирую писать не только про программирование, например, у меня есть несколько сумасшедших маркетинговых идей для разных областей бизнеса, которые мне не терпится попробовать. Так что Stay Tuned.