CoderCastrov logo
CoderCastrov
Инстаграм

Парсинг местоположений Instagram с помощью Python

Парсинг местоположений Instagram с помощью Python
просмотров
2 мин чтение
#Инстаграм

Сегодня нет доступа к поиску по тегам или геолокациям с использованием Instagram API или пакетов, таких как python-instagram, ничего не можем сделать. К счастью, есть метод, позволяющий разбирать данные (не только местоположения) из Instagram. Даже без аутентификации.

Парсинг без аутентификации и токенов

Суть заключается в получении JSON данных непосредственно с веб-сайта, а не с HTML страниц.

Во-первых, найдите все посты из определенной области. В этом случае поиск по тегу подходит наиболее: #russia, #moscow и т.д. Откройте страницу для тега #russia: https://www.instagram.com/explore/tags/russia/

Теперь добавьте "?__a=1" в конце URL: https://www.instagram.com/explore/tags/russia/?__a=1

Таким образом, мы получаем JSON данные для примерно 75 постов с тегом #russia из почти 50 миллионов. Как получить все эти данные?

Шаг 1: Парсинг всех постов с определенным тегом

Далее мы разбираем все данные. Для этого нам нужно получить идентификатор следующей страницы. Он равен параметру end_cursor:

graphql > hashtag > edge_hashtag_to_media > page_info > end_cursor

Его значение мы добавляем в запрос как max_id:

https://www.instagram.com/explore/tags/russia/?__a=1&max_id=_end_cursor_

Ниже приведен скрипт на языке Python, который собирает посты для первых 5 страниц и сохраняет их в формате JSON в текущей директории. Измените переменные tag и page_count на свои значения.

Шаг 2: Парсинг локаций Instagram

В наших новых данных JSON нет информации о местоположении. Эта информация хранится на странице поста. Структура URL-адреса выглядит следующим образом: https://www.instagram.com/p/_shortcode_/, где shortcode - это уникальная комбинация букв и цифр для каждого фото.

Получаем локации, используя тот же метод:

Вот некоторые локации, полученные для первых 206 постов с тегом #russia:

'Парк Зарядье'
'Казань, Татарстан'
'Нижний Новгород, Россия'
'Москва, Россия'
"Реутово, Московская область, Россия"
'Тюмень'
'Караоке Playboy'
'Красная Площадь'
'Москва'
'13 by Blackstar'
'ТЦ ЦУМ Москва'
'Сретенка Бар'
'Третьяковская галерея на Крымском валу'
'Бали, Индонезия'
'Курск, Россия'
'Мейхане Баку, Стамбул'
'ВТБ Арена'

Как видно, некоторые результаты не относятся к выбранной стране. Но это можно исправить, определив географическое положение и язык поста. Также с помощью NLP можно исключить рекламу из выборки.

Весь код доступен в моем репозитории GitHub:

tikseniia/get-location-instagram

Простой скрипт на Python для сбора местоположений постов в Instagram с определенным тегом - tikseniia/get-location-instagram

github.com