Как скачать всех подписчиков в инстаграм python
Перейти к содержимому

Как скачать всех подписчиков в инстаграм python

  • автор:

Получения списка подписчиков Instagram

Здравствуйте. Передо мной стоит задача, получить информацию о подписчиках заданных пользователей инстаграм, конечно, по возможности. Посмотрев доки Instagram Api нашел, что только для текущего пользователя, под которым залогинены можно получить список подписчиков: https://api.instagram.com/v1/users/self/follows?access_token=ACCESS-TOKEN Подобная конструкция не работает: https://api.instagram.com/v1/users//follows?access_token=ACCESS-TOKEN Вопрос о получение полноценного доступа к апишкам пропускается. Как это можно сделать, возможно не через api? Спасибо за помощь.

Отслеживать
задан 22 июн 2016 в 7:51
user2572457 user2572457
83 1 1 серебряный знак 7 7 бронзовых знаков

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Да, это возможно.

Например, есть пример бота на Python’e для Instagram’a.

В нём используется файл userinfo.py — для получения списка подписчиков не через API в обход через http://ink361.com :

сначала получаем юзера через

ui.search_user(user_name="danbilzerian") 

Затем с помощью этих строк на Pythone происходит получение первых 10 подписчиков этого юзера, а затем вывод их ников:

ui.get_followers(limit=10) print(ui.followers) 

Робот для автоматизированного просмотра Instagram на Python и Selenium

Недавно мы начали вести Instagram — подписывайтесь, чтобы не пропустить контент, которого нет в блоге и Telegram!

Многие из нас ежедневно заходят в Instagram, чтобы посмотреть истории друзей и полистать ленту постов и рекомендаций. Предлагаем действенный способ сохранить своё время — напишем на Python и Selenium робота, который возьмёт на себя рутинную задачу проверки свежих новостей друзей и подсчитает число новых историй и входящих сообщений.

Авторизация в аккаунт

При переходе в браузерную версию сайта, нас встречает такое окно:

Но просто вставить логин, пароль и нажать на кнопку «Войти» недостаточно: впереди будет ещё два окна. Во-первых, предложение сохранить данные — здесь мы тактично жмём «Не сейчас». Instagram тщательно следит за каждым нашим действием и малейшие аномалии в поведении приводят к блокировке, поэтому любые предложения по сохранению данных будем на всякий случай пропускать.

Следующим препятствием будет предложение включить уведомление, которое мы тоже пропустим:

Первым делом импортируем библиотеки:

from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from bs4 import BeautifulSoup as bs import time import random

И описываем функцию authorize — она будет принимать driver в качестве аргумента, отправлять в нужные поля логин и пароль, нажимать на кнопку «Войти», затем ждать десять секунд на загрузку страницы, нажимать на кнопку «Не сейчас», снова ждать загрузки страницы и пропускать уведомления:

def authorize(driver): username = 'login' password = 'password' driver.get('https://www.instagram.com') time.sleep(5) driver.find_element_by_name("username").send_keys(username) driver.find_element_by_name("password").send_keys(password) driver.execute_script("document.getElementsByClassName('sqdOP L3NKy y3zKF ')[0].click()") time.sleep(10) driver.execute_script("document.getElementsByClassName('sqdOP L3NKy y3zKF ')[0].click()") time.sleep(10) driver.execute_script("document.getElementsByClassName('aOOlW HoLwm ')[0].click()")

Новые сообщения

В Instagram могут прийти сообщения двух видов. В случае, если вы не подписаны на отправителя — придёт запрос на диалог. Если подписаны — придёт входящее сообщения. Оба случая обрабатываются по-разному. Число входящих сообщений можно получить с главной страницы — это число над иконкой бумажного самолётика:

А число запросов можно забрать текстом заголовка h5 из раздела «Сообщения». Сперва перейдём в этот раздел и попробуем найти строку с запросами на сообщение. Затем вернёмся на главную страницу и возьмём то самое число новых сообщений.

def messages_count(driver): driver.get('https://www.instagram.com/direct/inbox/') time.sleep(2) inbox = bs(driver.page_source) try: queries_text = inbox.find_all('h5')[0].text except Exception: queries_text = None driver.get('https://www.instagram.com') time.sleep(2) content = bs(driver.page_source) try: messages_count = int(content.find_all('div', attrs=)[0].text) except Exception: messages_count = 0 return queries_text, messages_count

Подсчёт числа новых сторис

Все истории хранятся в одном блоке:

Это список с одинаковым классом, но в каждом элементе списка лежит ещё один div-блок. У новых историй это класс eebAO h_uhZ, у просмотренных — eebAO.

Ещё есть такая кнопка, которая показывает следующую пачку историй:

При этом Instagram динамически прогружает код страницы, и в нём не найти те элементы, которые вы не видите своими глазами. Поэтому мы возьмём первые 8 видимых новых историй, добавим в список, нажмём на кнопку «Показать следующие истории» и будем продолжать так, пока кнопка ещё отображается. А затем подсчитаем число уникальных элементов, чтобы избежать возможных дубликатов.

def get_stories_count(driver): stories_divs = [] scroll = True while scroll: try: content = bs(driver.page_source) stories_divs.extend(content.find_all('div', attrs=)) driver.execute_script("document.getElementsByClassName(' _6CZji oevZr ')[0].click()") time.sleep(1) except Exception as E: scroll = False return len(set(stories_divs))

Просмотр сторис

Следующее, чем может заняться реальный пользователь после авторизации — просмотр свежих историй. Для того, чтобы зайти в блок историй, нужно просто нажать на кнопку класса OE3OK:

Есть еще две кнопки, о которых мы должны знать. Это кнопка для переключения на следующую историю — она в классе FhutL и кнопка закрытия блока историй — класс wpO6b. Пускай одна история будет отнимать у нас от 10 до 15 секунд, и с вероятностью 1/5 мы переключим на следующую. При этом зададим переменные counter и limit — пусть сейчас мы хотим посмотреть случайное число историй от 5 до 45, и если мы уже посмотрели столько, то выходим из функции и историй.

def watch_stories(driver): watching = True counter = 0 limit = random.randint(5, 45) driver.execute_script("document.getElementsByClassName('OE3OK ')[0].click()") try: while watching: time.sleep(random.randint(10, 15)) if random.randint(1, 5) == 5: driver.execute_script("document.getElementsByClassName('FhutL')[0].click()") counter += 1 if counter > limit: driver.execute_script("document.getElementsByClassName('wpO6b ')[1].click()") watching = False except Exception as E: print(E) watching = False

Скроллинг ленты

После просмотра актуальных историй можно поскроллить ленту — это действие ничем не отличается от классического скроллинга страниц в Selenium. Запоминаем последнюю доступную длину страницы, скроллим до неё, ожидаем прогрузки, получаем новую. Прекратим просматривать ленту в двух случаях — если в random.randint() сгенерировалась единица или если лента кончилась.

def scroll_feed(driver): scrolling = True last_height = driver.execute_script("return document.body.scrollHeight") while scrolling: driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(random.randint(4,10)) new_height = driver.execute_script("return document.body.scrollHeight") if new_height == last_height or random.randint(1, 10) == 1: scrolling = False last_height = new_height

Просмотр рекомендуемых аккаунтов

Instagram в заглавной странице сам рекомендует нам для подписки некоторые аккаунты. Выглядит она так:

И на ней тоже придётся скроллить, чтобы дойти до конца. Заходим на страницу и ожидаем 5 секунд прогрузки, затем снова получаем длину страницы и скроллим вниз. Выходим тоже с вероятностью 1/10 или если страница кончилась, но ещё с вероятностью 1/2 подписываемся на некоторые из первых 100 аккаунтов рекомендаций:

def scroll_recomendations(driver): driver.get('https://www.instagram.com/explore/people/suggested/') time.sleep(5) scrolling = True last_height = driver.execute_script("return document.body.scrollHeight") while scrolling: driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(random.randint(4,10)) new_height = driver.execute_script("return document.body.scrollHeight") if new_height == last_height or random.randint(1, 10) == 1: scrolling = False last_height = new_height if random.randint(0, 1): try: driver.execute_script(f"document.getElementsByClassName('sqdOP L3NKy y3zKF ')[].click()") except Exception as E: print(E)

Просмотр рекомендуемых постов

Помимо ленты, которая сформирована из наших подписок, Instagram собирает ленту рекомендаций. Туда входят все посты, которые потенциально могут вам понравиться — мы просто пройдём вниз по этой ленте. Выйдем с вероятностью 1/5 или когда кончится, чтобы долго не засиживаться.

def scroll_explore(driver): driver.get('https://www.instagram.com/explore') time.sleep(3) scrolling = True last_height = driver.execute_script("return document.body.scrollHeight") while scrolling: driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(random.randint(4,10)) new_height = driver.execute_script("return document.body.scrollHeight") if new_height == last_height or random.randint(1, 5) == 1: scrolling = False last_height = new_height

Итог

Теперь можно собрать все функции вместе — создаём новый driver, проводим авторизацию, считаем число новых сторис и сообщений, просматриваем сторис, переходим в рекомендуемые подписки и листаем ленту. В конце печатаем полученные данные — число новых сообщений, запросов и историй друзей.

driver = webdriver.Chrome(ChromeDriverManager().install()) authorize(driver) queries_text, messages_count = messages_count(driver) stories_count = get_stories_count(driver) watch_stories(driver) scroll_recomendations(driver) scroll_feed(driver) scroll_explore(driver) if queries_text is not None: print(queries_text) else: print('Нет новых запросов на диалог') print('Новых сообщений:', messages_count) print('Новых историй:', stories_count)

Как использовать Python для работы с API Instagram

Узнайте, как использовать Python для работы с API Instagram, получая данные о пользователях, фотографиях и видео в нашей практической статье.

Алексей Кодов
Автор статьи
23 июня 2023 в 18:40

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

Установка необходимых библиотек

Для начала работы с API Instagram, вам понадобятся следующие библиотеки:

  • requests для отправки HTTP-запросов
  • json для работы с JSON-данными

Установите их с помощью команды:

pip install requests 

Регистрация приложения на Instagram

Прежде чем начать работать с API Instagram, вам необходимо зарегистрировать свое приложение. Для этого перейдите на сайт для разработчиков Instagram и следуйте инструкциям.

После регистрации приложения вы получите Client ID и Client Secret . Они понадобятся для аутентификации и отправки запросов к API.

Аутентификация пользователя

Чтобы получить доступ к данным пользователя, вам необходимо получить токен доступа. Для этого используйте следующий код:

import requests client_id = "YOUR_CLIENT_ID" client_secret = "YOUR_CLIENT_SECRET" redirect_uri = "YOUR_REDIRECT_URI" auth_url = f"https://api.instagram.com/oauth/authorize?client_id=&redirect_uri=&scope=user_profile,user_media&response_type=code" print(f"Перейдите по ссылке для авторизации: ") code = input("Введите полученный код: ") token_url = "https://api.instagram.com/oauth/access_token" data = < "client_id": client_id, "client_secret": client_secret, "grant_type": "authorization_code", "redirect_uri": redirect_uri, "code": code >response = requests.post(token_url, data=data) access_token = response.json()["access_token"] print(f"Токен доступа: ")

Замените YOUR_CLIENT_ID , YOUR_CLIENT_SECRET и YOUR_REDIRECT_URI на соответствующие значения, полученные при регистрации приложения.

Получение данных с помощью API Instagram

Теперь, когда у вас есть токен доступа, вы можете использовать его для отправки запросов к API Instagram. Например, получение информации о пользователе:

import json user_info_url = f"https://graph.instagram.com/me?fields=id,username&access_token=" response = requests.get(user_info_url) user_info = response.json() print(json.dumps(user_info, indent=2))

Или получение списка последних фотографий пользователя:

media_url = f"https://graph.instagram.com/me/media?fields=id,media_type,media_url,thumbnail_url,permalink&access_token=" response = requests.get(media_url) media = response.json()["data"] for item in media: if item["media_type"] == "IMAGE": print(f" - ")

�� Теперь вы знаете, как использовать Python для работы с API Instagram. Используйте полученные знания для создания полезных приложений и автоматизации интересных задач. Удачи вам в изучении Python и успешной разработке!

Saved searches

Use saved searches to filter your results more quickly

Cancel Create saved search

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Парсер аккаунтов подписчиков и подписок в Instagram на основе прокрутки списков

License

leoneedpro/instagram-parser

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Go to file

Folders and files

Last commit message
Last commit date

Latest commit

History

View all files

Repository files navigation

Парсер аккаунтов подписчиков и подписок в Instagram (followers-parser.js)
Парсер активной аудитории (лайки) Instagram (likes-parser.js)

Поддержать развитие проекта:

instagram-parser-donate

Как использовать парсер подписчиков и подписок:

  1. Заходим в web-браузере http://instagram.com и авторизуемся
  2. Выбираем интересующий аккаунт с подписчиками и подписками
  3. Нажимаем на просмотр подписчиков и подписок
  4. Нажимаем сочетание клавиш (CTRL-SHIFT-J , по умолчанию в браузере Google Chrome)
  5. В открывшуюся консоль браузера, копируем и вставляем код скрипта instagram-parser.js
  6. Нажимаем клавишу ENTER и процесс парсинга подписчиков запущен!
  7. После окончания работы скрипта, станет доступен список имен аккаунтов подписчиков

Изменения и новый функционал (2019):

  1. Изменил код прокрутки — теперь без остановки проходит «Рекомендуемое»
  2. Теперь можно задавать кол-во аккаунтов для сбора (строка кода 26)
  3. Добавил возможность собирать помимо логинов, ещё и имена аккаунтов (строка кода 30)
  4. Добавил возможность изменять скорость сбора (строка кода 20)

Видео пример работы:

instagram-parser

Подписывайтесь, ставьте лайки, до новых встреч!:v:

About

Парсер аккаунтов подписчиков и подписок в Instagram на основе прокрутки списков

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *