Парсинг Инстаграма

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
SaintRu
Сообщения: 75
Зарегистрирован: 2020.05.13, 11:22
Контактная информация:

Парсинг Инстаграма

Сообщение SaintRu »

Здравствуйте! Подскажите как парсить инстаграм?
Сначала начал с postaddictme/instagram-php-scraper, но он вываливается в ошибку

Код: Выделить всё

Response code is 302. Body: Something went wrong. Please report issue.
Разработчики походу пока ее не побороли или забросили
Попробывал напрямую через file_get_contents.
2 недели назад, результат приходил, сейчас ф-ция стала давать исключение:

Код: Выделить всё

file_get_contents(https://www.instagram.com/p/CQAnCEHiWp0/): failed to open stream: HTTP request failed! HTTP/1.1 429
Мне парсинг нужен без залогинивания, только считывать информацию по разным аккаунтам.
Мой старт-ап ;) https://koenigs.ru

rak
Сообщения: 2171
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Парсинг Инстаграма

Сообщение rak »

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

SaintRu
Сообщения: 75
Зарегистрирован: 2020.05.13, 11:22
Контактная информация:

Re: Парсинг Инстаграма

Сообщение SaintRu »

Update.
Если делать запрос file_get_contents с локального компьютера, то ответ приходит нормально. А вот с хостинга выдает ошибку 429, но на локальном же Cron не поставишь.
Мой старт-ап ;) https://koenigs.ru

german.igortcev
Сообщения: 251
Зарегистрирован: 2014.08.18, 14:01

Re: Парсинг Инстаграма

Сообщение german.igortcev »

  • 1 Ограничение частоты запросов обязательно
    2 Заголовки нужно подсунуть как у мобильного устройства
    3 Они так же смотрят разрешение экрана
И все будет работать

SaintRu
Сообщения: 75
Зарегистрирован: 2020.05.13, 11:22
Контактная информация:

Re: Парсинг Инстаграма

Сообщение SaintRu »

german.igortcev писал(а):
2021.06.21, 18:36
  • 1 Ограничение частоты запросов обязательно
    2 Заголовки нужно подсунуть как у мобильного устройства
    3 Они так же смотрят разрешение экрана
И все будет работать
Можно пример заголовков? Не могу в инете нарыть, всё какая-то неработающая фигня попадается
Мой старт-ап ;) https://koenigs.ru

german.igortcev
Сообщения: 251
Зарегистрирован: 2014.08.18, 14:01

Re: Парсинг Инстаграма

Сообщение german.igortcev »

В том то и дело. Пока Вы не научитесь эмулировать мобильное устройство, то у Вас ничего не получится. Провидите эксперимент, подмените отправляемы заголовки в браузере на мобильные в том числе User-Agent.

Код: Выделить всё

https://deviceatlas.com/blog/mobile-browser-user-agent-strings

SaintRu
Сообщения: 75
Зарегистрирован: 2020.05.13, 11:22
Контактная информация:

Re: Парсинг Инстаграма

Сообщение SaintRu »

Заголовок User-Agent уже по разному подменял, даже подменил все заголовки (подсмотрел у брузера по F12)
Локально работает, с хоста нет:

Код: Выделить всё

            $opts = [
                'http' => [
                    'method'=>"GET",
                    'header' =>
                        "accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7\r\n" .
                        "user-agent: Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SCH-I535 Build/KOT49H) 
                        	AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\r\n"
                ]];

            $context = stream_context_create($opts);
            $result = file_get_contents('https://www.instagram.com/kuda_dety39/?__a=1', false, $context);
Еще возникла одна проблема:
изначально

Код: Выделить всё

 file_get_contents('https://www.instagram.com/kuda_dety39/?__a=1');
возвращало JSON, сейчас возвращает всю страницу с html-тегами, хотя если в браузере перейти по этому адресу возвратится JSON
Мой старт-ап ;) https://koenigs.ru

SaintRu
Сообщения: 75
Зарегистрирован: 2020.05.13, 11:22
Контактная информация:

Re: Парсинг Инстаграма

Сообщение SaintRu »

Update

Код: Выделить всё

Response code is 302. Body: Something went wrong. Please report issue.
Означает что IP сервера заблокирован инстаграмом. Нужно использовать proxy, но

Код: Выделить всё

$instagram = new \InstagramScraper\Instagram(new \GuzzleHttp\Client(['proxy' => 'http://localhost:9124']));
дает ошибку

Код: Выделить всё

cURL error 7: Failed to connect to localhost port 9124: Connection refused (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)
Мой старт-ап ;) https://koenigs.ru

rak
Сообщения: 2171
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Парсинг Инстаграма

Сообщение rak »

SaintRu писал(а):
2021.06.22, 18:06
Update

Код: Выделить всё

Response code is 302. Body: Something went wrong. Please report issue.
Означает что IP сервера заблокирован инстаграмом. Нужно использовать proxy, но

Код: Выделить всё

$instagram = new \InstagramScraper\Instagram(new \GuzzleHttp\Client(['proxy' => 'http://localhost:9124']));
дает ошибку

Код: Выделить всё

cURL error 7: Failed to connect to localhost port 9124: Connection refused (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)
И как вы на сервере хотите получать данные с локалхоста? :shock:


А по инстаграму - подмена user agent не работает.

Ответить