Как парсить Instagram с помощью Python и прокси Astro: пошаговый кейс

02 July 2026

image

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

При росте объёма запросов возникает ключевая задача – обеспечить стабильную работу парсера. Если отправлять все запросы с одного IP-адреса, со временем можно столкнуться с ограничениями, снижением скорости ответов и блокировками. Резидентные прокси решают эту проблему: запросы распределяются по пулу реальных IP-адресов, а нагрузка на каждый отдельный адрес остаётся минимальной.

В предыдущей статье мы разобрали, зачем нужны прокси для Instagram. А в этом кейсе покажем, как подключить резидентные прокси Astro к Python-парсеру и организовать сбор публичных данных из Instagram. Вы узнаете, как настроить HTTP-клиент, подключить прокси, корректно обрабатывать ответы и подготовить проект к масштабированию.

После прочтения статьи вы сможете:

  • подключить прокси Astro к Python;
  • настроить HTTP-клиент с использованием `httpx`;
  • запрашивать публичные страницы Instagram и проверять корректность ответа;
  • обрабатывать ограничения со стороны сервиса (редиректы, лимиты запросов);
  • масштабировать парсер без изменения архитектуры приложения.

Важно знать перед началом

Instagram активно ограничивает автоматический доступ к своим страницам. Что это означает на практике:

  • Без авторизации сервис может перенаправить запрос на страницу входа. Парсер должен уметь распознавать такую ситуацию, а не считать её успешным ответом.
  • Значительная часть контента подгружается через JavaScript. Простым HTTP-запросом надёжно извлекаются в первую очередь данные из мета-тегов страницы (название профиля, описание, число подписчиков и публикаций из `og:description`). Для более глубокого сбора данных потребуются другие инструменты, например браузерная автоматизация.
  • Не отправляйте запросы слишком часто. Паузы между запросами и обработка кода 429 – обязательная часть любого рабочего парсера.
  • Перед запуском проекта убедитесь, что сбор данных соответствует условиям использования сервиса и законодательству вашей юрисдикции. Работайте только с общедоступной информацией.

Почему Astro подходит для парсинга Instagram

При масштабировании парсинга Instagram важен не только код, но и качество прокси-инфраструктуры. Если пул IP небольшой или ротация ограничена, даже хорошо написанный парсер со временем начнёт сталкиваться с лимитами и снижением стабильности.

Astro предоставляет инструменты, которые помогают избежать этих проблем:

  • 50 миллионов IP-адресов в 150 странах позволяют распределять запросы между большим количеством реальных резидентных адресов и масштабировать сбор данных без изменения архитектуры приложения.
  • Несколько режимов ротации IP – новый адрес при каждом соединении, смена по таймеру (от 1 минуты) или принудительная смена через API. Это позволяет подобрать оптимальную стратегию под конкретный сценарий парсинга.
  • Гибкий геотаргетинг – выбор страны, города или интернет-провайдера, возможность использовать до 10 стран на одном порту или случайную страну с исключением нежелательных регионов.
  • Поддержка HTTP(S) и SOCKS5, а также до 250 одновременных TCP-соединений на один порт, что удобно при параллельной обработке большого количества профилей.
  • 99,9% uptime помогает обеспечить стабильную работу долгоживущих парсеров и автоматизированных задач.

Для тестирования сервиса доступен бесплатный тест $3, которого достаточно, чтобы проверить работу прокси со своим кодом до покупки.

Именно поэтому Astro хорошо подходит как для небольших Python-скриптов, так и для масштабных систем, собирающих публичные данные из Instagram на постоянной основе.

Особенность подключения: только доменные имена

Прокси Astro работают с запросами по доменным именам – обращение к ресурсам напрямую по IP-адресу недоступно. Для нашего парсера это не создаёт ограничений: все запросы формируются через домен `www.instagram.com`, а DNS-резолвинг выполняется на стороне прокси-сервера.

Единственное, что нужно учитывать: не используйте в коде предварительный резолвинг домена в IP-адрес (например, через `socket.gethostbyname`) с последующим запросом по этому IP – такой запрос прокси не пропустит. Всегда передавайте в HTTP-клиент URL с доменным именем.

Что понадобится

  • Python 3.11 или новее;
  • библиотека `httpx`;
  • библиотека `beautifulsoup4` (для разбора HTML);
  • учётные данные прокси Astro.

Устанавливаем зависимости:

```bash

pip install httpx beautifulsoup4

Структура проекта

instagram-parser/

├── config.py

├── parser.py

└── requirements.txt

Содержимое `requirements.txt`:

httpx>=0.27

beautifulsoup4>=4.12

Шаг 1. Настраиваем прокси

Создадим файл `config.py`:

```python

PROXY_HOST = "YOUR_PROXY_HOST"

PROXY_PORT = "YOUR_PROXY_PORT"

PROXY_LOGIN = "YOUR_LOGIN"

PROXY_PASSWORD = "YOUR_PASSWORD"

```

В боевых проектах храните учётные данные в переменных окружения или секрет-хранилище, а не в коде репозитория.

Шаг 2. Подключаем прокси Astro к Python

```python

from urllib.parse import quote

import httpx

from config import PROXY_HOST, PROXY_PORT, PROXY_LOGIN, PROXY_PASSWORD

proxy = (

    f"http://{quote(PROXY_LOGIN)}:{quote(PROXY_PASSWORD)}"

    f"@{PROXY_HOST}:{PROXY_PORT}"

)

Обратите внимание на `quote()`: если в логине или пароле встречаются спецсимволы (`@`, `:`, `/`), без экранирования URL прокси окажется некорректным.

Сам клиент создаём через контекстный менеджер – так соединения гарантированно закрываются:

```python

with httpx.Client(

    proxy=proxy,

    timeout=30,

    follow_redirects=True,

) as client:

```

Теперь все HTTP-запросы будут выполняться через прокси Astro.

Шаг 3. Формируем список профилей

```python

profiles = [

    "natgeo",

    "nasa",

    "nike",

    "github",

    "instagram",

]

```

Шаг 4. Запрашиваем страницу профиля и проверяем ответ

```python

HEADERS = {

    "User-Agent": (

        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "

        "AppleWebKit/537.36 (KHTML, like Gecko) "

        "Chrome/137.0.0.0 Safari/537.36"

    ),

    "Accept-Language": "en-US,en;q=0.9",

}

def fetch_profile(client: httpx.Client, username: str) -> str:

    url = f"https://www.instagram.com/{username}/"

    response = client.get(url, headers=HEADERS)

    response.raise_for_status()

Instagram может ответить кодом 200, но перенаправить на страницу входа. Такой ответ не содержит данных профиля – фиксируем это явно.

    if "/accounts/login" in str(response.url):

        raise RuntimeError("Instagram перенаправил на страницу входа")

    return response.text

```

Проверка финального URL – принципиальный момент. Поскольку клиент следует редиректам, страница логина вернётся со статусом 200, и без этой проверки парсер посчитал бы её успешным результатом.

Шаг 5. Извлекаем данные из HTML

Из HTML публичной страницы надёжнее всего извлекаются мета-теги – в них Instagram размещает краткую сводку профиля:

```python

from bs4 import BeautifulSoup

def extract_summary(html: str) -> str | None:

    soup = BeautifulSoup(html, "html.parser")

    tag = soup.find("meta", property="og:description")

    return tag["content"] if tag else None

```

В `og:description` обычно указано число подписчиков, подписок и публикаций – этого достаточно для мониторинга динамики публичных профилей.

Шаг 6. Запускаем парсер

```python

import time

def main() -> None:

    with httpx.Client(

        proxy=proxy,

        timeout=30,

        follow_redirects=True,

    ) as client:

        for username in profiles:

            try:

                html = fetch_profile(client, username)

                summary = extract_summary(html)

                print(f"{username}: {summary or 'мета-данные не найдены'}")

            except httpx.HTTPStatusError as e:

                status = e.response.status_code

                if status == 429:

                    print(f"{username}: превышен лимит запросов, пауза 60 сек")

                    time.sleep(60)

                else:

                    print(f"{username}: HTTP {status}")

            except Exception as e:

                print(f"{username}: {e}")

 Пауза между запросами снижает риск блокировки.

            time.sleep(5)

if __name__ == "__main__":

    main()

```

Как работает парсер Instagram через прокси

Python → httpx Client → Astro Proxy → www.instagram.com

Все запросы проходят через прокси, при этом код приложения практически не меняется. Запросы идут строго по доменному имени, поэтому ограничение прокси на прямые обращения к IP-адресам никак не влияет на работу парсера. Одна и та же архитектура подходит как для небольших проектов, так и для масштабных систем веб-скрейпинга – при росте нагрузки достаточно распараллелить обработку списка профилей и увеличить пул прокси.

Где можно использовать такой подход

Этот пример можно адаптировать для различных задач:

  • мониторинг публичных Instagram-профилей и динамики подписчиков;
  • анализ конкурентов;
  • сбор открытых данных;
  • маркетинговые исследования;
  • построение аналитических сервисов;
  • автоматизация веб-скрейпинга.

Заключение

Использование прокси Astro позволяет быстро подключить сетевой уровень к существующему Python-парсеру без изменения бизнес-логики приложения. Парсер из этого кейса корректно обрабатывает редиректы на страницу входа, соблюдает паузы между запросами, реагирует на лимиты со стороны сервиса и работает исключительно через доменные имена – в полном соответствии с моделью подключения прокси Astro.

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

Если вы только начинаете работать с веб-скрейпингом или хотите масштабировать существующий парсер, команда Astro поможет подобрать подходящий тип прокси и оптимальные настройки. Обратитесь в техподдержку, чтобы получить консультацию, протестировать сервис и быстро запустить проект.

Назад на Главную
Поделиться

Вопросы по теме

  • Для парсинга Instagram можно использовать Python вместе с HTTP-клиентом, например httpx. Запросы отправляются на публичные страницы профилей, после чего нужные данные извлекаются из HTML с помощью BeautifulSoup. Для стабильной работы рекомендуется использовать резидентные прокси и соблюдать ограничения по частоте запросов.

  • Если все запросы отправляются с одного IP-адреса, Instagram может ограничить доступ, замедлить ответы или перенаправить пользователя на страницу авторизации. Прокси позволяют распределять запросы между разными IP-адресами и снизить вероятность подобных ограничений.

  • Для большинства задач веб-скрейпинга используются резидентные прокси. Они работают через реальные пользовательские IP-адреса и позволяют более равномерно распределять запросы при сборе публичных данных.

  • Да. Часть общедоступной информации доступна без входа в аккаунт. Например, можно получить HTML публичного профиля и извлечь данные из мета-тегов страницы. Однако часть информации доступна только авторизованным пользователям или загружается через JavaScript.

  • Instagram может перенаправлять даже при ответе со статусом HTTP 200. Обычно это происходит при подозрении на автоматический сбор данных или превышении допустимой активности. Поэтому парсер должен проверять не только код ответа, но и итоговый URL после выполнения редиректов.

  • Код ответа HTTP 429 означает превышение допустимого количества запросов. Обычно проблему решают уменьшением скорости парсинга, увеличением пауз между запросами и использованием ротации прокси.

  • В базовом примере достаточно установить две библиотеки:

     

    • httpx – для выполнения HTTP-запросов;
    • beautifulsoup4 – для разбора HTML и извлечения данных.

  • Да. Astro поддерживает подключение через HTTP(S) и SOCKS5, поэтому прокси можно использовать с httpx, requests, aiohttp и большинством других Python-библиотек без изменения логики приложения.

Еще по теме

Чтобы получить бесплатный
тест прокси, напишите в поддержку!