Пишем бота для Instagram на Python
Пошаговое руководство по созданию бота для Instagram на Python, который будет всё делать за вас: лайки, подписки, комментарии, анализ постов... Остаётся лишь фотографировать!
Чтобы охватить большую аудиторию в Instagram, получить больше лайков и новых подписчиков, мы обращаемся за помощью к специалистам: SocialCaptain, Kicksta, Instavast и другим компаниям. У них есть автоматизированные инструменты, которые делают за вас всю работу. За это мы платим большие деньги – но то же самое можно получить бесплатно, используя InstaPy.
Мы напишем бота на Python, который автоматизирует ваши действия в Instagram. В результате вы получите больше лайков и подписчиков с минимальными усилиями. Параллельно разберемся в автоматизации браузера, работе Selenium и шаблона Page Object
, лежащих в основе InstaPy.
Как устроены боты Instagram
Прежде чем начинать автоматизировать что-либо, давайте подумаем, как получает лайки и подписки в Instagram реальный пользователь?
За счет активности. Человек размещает посты, просматривает ленту, лайкает и комментирует посты других людей. Боты делают то же самое, но не тратя ваше время. Вы лишь устанавливаете критерии выбора.
Очень важны настройки бота, ведь от них напрямую зависят результаты, которые вы получите. Важно отобрать те профили, владельцам которых будет интересен ваш контент. Например, если вы продаете в Instagram женскую одежду, будет разумно научить бота отслеживать женские аккаунты, а также посты с хештегами #красота
, #мода
, #одежда
. Это повысит вероятность того, что ваш профиль будет замечен целевой аудиторией.
Но как реализовать это технически? Instagram Developer API ограничен и не подойдет для наших целей. Следует обратиться к браузерной автоматизации.
Это работает очень просто:
- Вы указываете свои учетные данные.
- Устанавливаете критерии для отбора профилей и постов, а также настройки для комментариев.
- Бот открывает браузер, переходит на сайт, авторизуется с вашими данными и начинает выполнять полученные инструкции.
Давайте перейдем к практике. Для начала напишем бота, который сможет самостоятельно зайти в ваш Instagram-профиль.
Автоматизация браузера
Для первой версии бота будем использовать Selenium – инструмент, работающий под капотом InstaPy, к которому мы перейдем чуть позже.
Для начала установите сам Selenium. Убедитесь, что на вашем компьютере установлен браузер Firefox и Firefox WebDriver. Мы будем работать с этим браузером, так как в последней версии InstaPy нет поддержки Chrome.
Для работы Selenium вам также может понадобиться установить geckodriver.
1. Открываем браузер
Создайте файл с расширением .py
и вставьте туда следующий код:
Сначала мы импортируем нужные пакеты. Затем инициализируется драйвер Firefox и запускается браузер. Бот набирает в адресной строке адрес https://www.instagram.com/
– открывается страница авторизации Instagram. Через 5 секунд ожидания браузер закрывается. Запустите код и проверьте, как он работает. Только что мы написали в своем роде "Hello world" на Selenium.
2. Открываем страницу авторизации
Добавим авторизацию. Для начала составим пошаговый алгоритм действий:
- Перейти на страницу
https://www.instagram.com/.
- Нажать ссылку
Авторизоваться
. - Ввести логин и пароль.
- Нажать на кнопку
Log In
(Войти
).
Первый пункт мы уже выполнили. Давайте теперь найдем на странице ссылку для авторизации и кликнем по ней:
Мы используем для поиска нужной ссылки XPath, но есть и другие методы.
Запустите скрипт и убедитесь, что он работает. В браузере должна открыться страница авторизации.
3. Заполнение формы
В форме авторизации – три важных элемента:
- Поле для введения логина;
- Поле для пароля;
- Кнопка
Войти
.
Давайте найдем их, введем учетные данные и залогинимся:
Устанавливаем двухсекундную задержку для загрузки страницы. Находим и заполняем нужные поля. В конце ищем и нажимаем кнопку для входа.
Если вы укажете правильные данные и запустите этот скрипт, он самостоятельно авторизуется в вашем Instagram аккаунте.
Мы отлично начали, и при желании легко можем продолжить создавать бота. Дальнейшие действия очень похожи на уже сделанные: прокручиваем ленту вниз, ищем интересные посты по определенным критериями, ищем кнопку для лайка и нажимаем на нее, ищем раздел с комментариями и т. д.
Хорошая новость – все эти шаги за вас может сделать InstaPy. Но прежде чем мы начнем с ним работать, давайте разберемся в основах – паттерне Page Object.
Шаблон Page Object
Мы написали код для авторизации – но как теперь его тестировать ? Это могло бы выглядеть как-то так:
Что не так с этим кодом? Он не соответствует принципу DRY и идеям чистого кода: одни и те же фрагменты дублируются и в приложении, и в тесте.
В этом контексте дублирование кода особенно плохо, так как Selenium зависит от элементов пользовательского интерфейса, а они имеют тенденцию меняться. Если это происходит, хотелось бы вносить изменения только в одном месте, а не в десятке. Здесь и приходит на помощь шаблон Page Object.
С помощью этого шаблона вы создаете классы page objects для наиболее важных страниц или фрагментов страницы, которые предоставляют удобные интерфейсы для взаимодействия.
Мы можем отрефакторить наш код и создать класс HomePage
и класс LoginPage
:
Логика осталась без изменений, только теперь домашняя страница и страница входа представлены в виде классов. Они инкапсулируют все действия, необходимые для поиска и обработки данных в пользовательском интерфейсе.
Обратите внимание, при переходе на другую страницу с помощью метода объекта страницы, возвращается новый объект страницы. Взгляните на возвращаемое значение функции go_to_log_in_page()
.
Если бы у нас уже был класс FeedPage
, то метод login()
класса LoginPage
вернул бы экземпляр страницы фида (return FeedPage()
).
Изменим основной код:
Теперь программа выглядит намного проще и понятнее. Тесты тоже можно переписать:
Если в интерфейсе что-то изменится, не придется менять тесты – и это правильно.
Чтобы узнать больше о шаблоне Page Object, обратитесь к официальной документации и статье Мартина Фаулера.
А мы переходим к созданию бота версии 2.0 – с помощью InstaPy.
Создание бота с помощью InstaPy
Для начала установим InstaPy:
Авторизация в Instagram
Перепишем код с использованием InstaPy:
Подставьте правильный логин и пароль и запустите скрипт. Вуаля! Одна строчка кода – а результат тот же самый!
На самом деле, не тот же самый. Instapy выполняет множество других действий: проверяет интернет-соединение, состояние серверов Instagram и пр. Все это вы можете наблюдать напрямую в браузере, а также в логах.
Неплохо для одной строки кода, правда? Переходим к решительным действиям!
Основные настройки бота
Предположим, что ваш профиль посвящен автомобилям. Вы хотите, чтобы бот взаимодействовал с профилями людей, интересующихся автомобилями.
Лайки
Например, бот может лайкать посты с хештегами #bmw
или #mercedes
. Для этого предназначен метод like_by_tags()
:
Мы передаем методу массив тегов, которые нужно лайкнуть, и количество постов для каждого тега. Другими словами, бот должен поставить 10 лайков – по пять для каждого из двух тегов.
Но взгляните, что происходит в логах после запуска скрипта:
По умолчанию InstaPy будет лайкать первые девять постов в ленте к дополнению к параметру amount
. В этом случае общее количество лайков – 14 на один тег (9 + 5).
InstaPy регистрирует каждое действие: упоминает, какой пост ему понравился, ссылку на него, описание, местоположение, указывает, комментировал ли и подписался ли на аккаунт.
Возможно, вы заметили, что почти после каждого действия возникают задержки. Это сделано специально, чтобы Instagram не забанил ваш профиль.
Вы также можете указать параметры постов, которые бот НЕ должен лайкать, с помощью метода set_dont_like()
:
Теперь бот будет игнорировать посты, в описании которых есть слова "naked" или "nsfw" (not safe/suitable for work).
Подписки
Кроме лайков бот умеет подписываться на аккаунты. Для этого предназначена функция set_do_follow()
:
Если вы запустите этот скрипт, то бот подпишется на 50% от тех юзеров, чьи посты он лайкнул. Опять же каждое действие будет залогировано.
Комментарии
Еще одна опция InstaPy – возможность оставлять комментарии. Для этого нужно сделать две вещи. Сначала разрешите комментирование вызовом метода set_do_comment()
:
Затем укажите, что именно писать с помощью set_comments()
:
Запустите скрипт, и бот оставит один из трех указанных комментариев под половиной постов, с которыми он взаимодействовал.
Закрытие сессии
После того, как вы сделали все, что хотели, нужно закрыть сессию, вызвав метод end()
:
Эта команда закроет браузер, сохранит логи и подготовит отчет, который вы можете увидеть в консоли.
Дополнительные возможности InstaPy
InstaPy – это большой проект, который имеет множество тщательно документированных функций. Рассмотрим несколько наиболее полезных из них.
Квоты
Нельзя скрейпить Instagram целыми днями, сервис быстро это заметит. Поэтому полезно установить квоты на действия бота.
Этот код ограничивает пределы комментирования за час и за целый день. Когда бот достигнет их, он перестанет комментировать и будет ждать истечения периода квоты.
Аргумент headless_browser
Указанный в названии аргумент позволяет запускать бота без графического интерфейса браузера. Она полезна, если вы хотите развернуть бота на сервере, где нет или не нужен интерфейс. Производительность в таком режиме выше, так как меньше нагрузка на процессор.
Обратите внимание, соответствующий флаг устанавливается при инициализации объекта InstaPy.
Искусственный интеллект для анализа сообщений
Мы уже научились игнорировать сообщения, в которых содержатся неуместные слова. А что делать, если описание нормальное, но сама картинка неуместна?
InstaPy-бот можно интегрировать с ClarifApi – инструментом для распознавания изображений и видео:
Теперь бот будет игнорировать любое изображение, которое ClarifApi посчитает NSFW. 5000 обращений в месяц – бесплатно.
Количество подписчиков
Зачастую не имеет смысла взаимодействовать с аккаунтами с большим количеством подписчиков. InstaPy дает возможность установить границы для этого количества, чтобы бот не тратил впустую вычислительные ресурсы вашей машины:
Теперь бот не будет взаимодействовать с постами пользователей, у которых больше 8,5 тысяч подписчиков.
Множество других опций и конфигураций вы можете найти в документации InstaPy.
InstaPy – гибкий инструмент, который позволяет легко и быстро автоматизировать действия пользователя в Instagram. Его работа основана на браузерной автоматизации (Selenium) и использовании шаблона Page Object для облегчения работы с веб-страницами.
Если вы еще не начали писать код, прочитайте нашу публикацию о том, как создать виртуальное окружение в Python. Это позволит избежать проблем с зависимостями пакетом. Мы также писали о том, как работает распознавание объектов в реальном времен – впоследствии бота можно улучшить, если привлечь собственную модель для анализа фотографий пользователей.