CoderCastrov logo
CoderCastrov
Парсер

Как парсить посты, комментарии и фотографии в Instagram

Как парсить посты, комментарии и фотографии в Instagram
просмотров
4 мин чтение
#Парсер

Официальное Instagram API позволяет программно получать доступ только к вашим собственным комментариям и постам в Instagram. Однако, API не позволяет получить список постов, сделанных другими людьми, комментарии и фотографии к этим постам, или получить список постов с определенным хэштегом.

В этой статье вы узнаете, как мы создали новый Instagram Парсер (jaroslavhejlek/instagram-scraper) актор на Apify для парсинга этих данных с публичного веб-сайта Instagram. Вы можете сразу попробовать новый актор, бесплатно.

Где найти данные

Самый простой способ искать и получать контент на Instagram - использовать мобильное приложение или веб-сайт:

Некоторые разделы Instagram доступны даже без авторизации, но не так много, как раньше. После входа в аккаунт вы можете просматривать хэштеги, профили, места и публикации. Это очень удобно, потому что если вы можете сделать что-то вручную в веб-браузере, вы можете автоматизировать это на Apify 😉

Данные, доступные публично без входа в систему

Если вы откроете веб-сайт в режиме инкогнито, вы быстро обнаружите, что некоторые функции можно использовать бесплатно, а некоторые заблокированы или требуют входа в систему. Вот что вы можете найти без входа в систему (обратите внимание, что это может измениться):

1) Поиск

Вы можете искать профили, хэштеги и места, и Instagram вернет топ-100 постов.

Даже есть удобный внутренний API-эндпоинт, который можно использовать для получения результатов в формате JSON:

[https://www.instagram.com/web/search/topsearch/?context=blended&query=avengers](https://www.instagram.com/web/search/topsearch/?context=blended&query=avengers)

Параметр запроса context служит фильтром и может содержать место, пользователя или хэштег. Единственное ограничение заключается в том, что эндпоинт возвращает только 100 результатов. Если вам нужно больше, вам нужно ввести более подробный фильтр.

2) Посты из профилей/хэштегов/мест

Когда вы открываете любую публичную страницу Instagram, которая содержит посты (например, профиль, хэштег или место), Instagram возвращает HTML-страницу с предварительно загруженными первыми несколькими постами (вероятно, используя серверный рендеринг React). Затем, когда вы прокручиваете страницу вниз, Instagram продолжает загружать больше постов, используя запрос XHR к эндпоинту GraphQL Instagram. Этот эндпоинт защищен токеном, поэтому нельзя получить к нему прямой доступ, и нам нужно бесконечно прокручивать страницу. Однако мы можем хорошо автоматизировать бесконечную прокрутку, используя headless Chrome с Puppeteer.

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

3) Комментарии к постам

У каждого поста в Instagram есть публично видимые комментарии и кнопка Загрузить больше комментариев, если есть еще комментарии, которые можно показать.

Нажатие на кнопку вызывает XHR-запрос к графическому конечному пункту Instagram. Опять же, мы легко можем автоматизировать это, используя функцию [page.click()](https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pageclickselector-options) в Puppeteer, а затем извлечь содержимое комментариев со страницы.

Данные доступны только после входа в систему

К сожалению, определенный контент может быть доступен только после входа в систему с использованием учетной записи Instagram, например:

  • Список подписчиков
  • Список людей, на которых подписан пользователь

Хотя было бы возможно автоматически войти в систему в Instagram, чтобы получить доступ к этим данным, такой подход рискованный, поскольку он может привести к блокировке вашей учетной записи Instagram. Конечно, вы могли бы создать фиктивную учетную запись Instagram и использовать ее вместо этого, но это выходит за рамки этой статьи.

С течением времени Instagram все больше ограничивает доступные данные без входа в систему, поэтому вам придется проверить, какие данные вы можете парсить.

Создание актора Apify для парсинга данных

Для создания и упаковки веб-парсера для Instagram я создал новый актор на Apify. Акторы - это облачные программы, которые принимают вводные данные, выполняют свою работу и генерируют некоторый вывод. Они могут быть запущены вручную в приложении, с использованием API или планировщика.

Актор написан на Node.js и использует Apify SDK. На вход он принимает запрос Instagram или список прямых URL-адресов профилей, затем выполняет поиск запроса и парсит детали страниц, посты или комментарии из результатов и прямых URL-адресов. Все полученные данные хранятся в структурированной форме в наборе данных, из которого их можно загрузить в форматах JSON, XML, Excel, CSV и т. д.

Актор опубликован в Apify Store под названием Instagram scraper (jaroslavhejlek/instagram-scraper) и вы можете использовать его бесплатно, хотя вам потребуются резиденциальные прокси на Apify Proxy. Исходный код доступен на GitHub - пул-реквесты и идеи для улучшения приветствуются!

Обновление: в 2021 году Instagram изменил правила и теперь вам всегда нужно использовать прокси для парсинга 😖 Бесплатная пробная версия Apify Proxy, предоставляемая каждому новому пользователю Apify, не будет достаточной, так как вам потребуется использовать резиденциальные прокси. Но напишите на электронную почту support@apify.com и сообщите им, что вам нужна бесплатная пробная версия резиденциальных прокси, чтобы вы могли парсить Instagram, и они помогут вам!

Если вы запустите парсер на Apify без резиденциальных прокси, есть большая вероятность, что Instagram заблокирует доступ и не вернет никаких данных, поэтому мы настоятельно рекомендуем использовать Apify Proxy. Вы также можете запустить актор на своем локальном компьютере - все должно работать нормально.