OlegYurchik / pyInstagram

This is a simple and easy-to-use library for interacting with the Instagram. The library works through the web interface of the Instagram and does not depend on the official API
MIT License
232 stars 49 forks source link

instagram.exceptions.UnexpectedResponse #63

Open grafist02511 opened 5 years ago

grafist02511 commented 5 years ago

Get unexpected response from 'https://www.instagram.com/accounts/login/?next=/explore/locations/219892316/' Отвалился парсинг фото по геолокации. Это вышла обнова у Инстаграм?

OlegYurchik commented 5 years ago

Да, наверное, в последнее время не слежу за этим

r3dnck commented 5 years ago

If you're trying to access Instagram user profile: Instagram has just changed the behavior of its web version interface. Now no one can view more than a few users' profiles without being authorized on their servers first. In other words, user profiles are no longer publicly available for servers like ours. We're currently searching for ways to solve this problem. Sorry for the inconveniences.

https://github.com/RSS-Bridge/rss-bridge/issues/1271

kirill568 commented 4 years ago

У меня такая же ошибка, только я не могу авторизоваться. Может нашли решение?

grafist02511 commented 4 years ago

У меня такая же ошибка, только я не могу авторизоваться. Может нашли решение?

Авторизация мне не нужна

agent = WebAgent() location = Location(1234567) account = Account("zuck") media1, pointer = agent.get_media(account) media1, pointer = agent.get_media(location, pointer=pointer, count=15, delay=1)

С такими костылями у меня работает

kirill568 commented 4 years ago

Нет, пишет KeyError: 'ProfilePage', я так понимаю, что он не может просматривать страницы.

kirill568 commented 4 years ago

даже если установить proxy, всё равно появляется ошибка, очень странно

grafist02511 commented 4 years ago

Код из quickstart работает?

from instagram import Account, Media, WebAgent

agent = WebAgent() account = Account("zuck")

media1, pointer = agent.get_media(account) print (media1)

kirill568 commented 4 years ago

Нет, в этом и прикол

kirill568 commented 4 years ago

Сегодня с утра всё работало, вечером начал парсить аккаунты, и опять вылетела эта ошибка instagram.exceptions.UnexpectedResponse: Get unexpected response from 'https://www.instagram.com/accounts/login/' Error: 'ProfilePage' Не знаю что делать

Lip4ik commented 4 years ago

Проксю убери из-за нее не работает скачивание медиа

kirill568 commented 4 years ago

Проксю убери из-за нее не работает скачивание медиа

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

Lip4ik commented 4 years ago

Проксю убери из-за нее не работает скачивание медиа

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

Нет, фича в том что прокси её решает частично( в случае лайков и комментов) если вы при 429 будете менять проксю скачивание продолжится. Однако в media при подключении любой прокси вылетает ошибка ProfilePage not found (или что-то вроде того). А в случае с лайкамм и клиентами или 429( много запросов) или 403( не валидная прокся)

Lip4ik commented 4 years ago

А vpn не является альтернативой, так как если писать для своего устройства все окей, а если многопользовательское то все сломается. Или же ставить на всех впн и тд

kirill568 commented 4 years ago

А vpn не является альтернативой, так как если писать для своего устройства все окей, а если многопользовательское то все сломается. Или же ставить на всех впн и тд

Есть тогда какое-нибудь решение? Мне нужно доставать информацию из bio большого количества аккаунтов.

Lip4ik commented 4 years ago

А vpn не является альтернативой, так как если писать для своего устройства все окей, а если многопользовательское то все сломается. Или же ставить на всех впн и тд

Есть тогда какое-нибудь решение? Мне нужно доставать информацию из bio большого количества аккаунтов.

Какой метод вы используете? get_media?

kirill568 commented 4 years ago

А vpn не является альтернативой, так как если писать для своего устройства все окей, а если многопользовательское то все сломается. Или же ставить на всех впн и тд

Есть тогда какое-нибудь решение? Мне нужно доставать информацию из bio большого количества аккаунтов.

Какой метод вы используете? get_media?

account = Account(people)
agent.update(account)
biography = account.biography
name = account.full_name
Lip4ik commented 4 years ago

cnt_proxy = 0 settings = None settings_list = [None]

def Change_proxy(): global cnt_proxy global settings global settings_list if cnt_proxy == len(settings_list) - 1: cnt_proxy = 0 else: cnt_proxy += 1 settings = settings_list[cnt_proxy] print("Change proxy to", cnt_proxy)

def Exception_handler(e): global cnt_proxy global settings global settings_list if "Cannot connect to proxy." in str(e.args[0]): del settings_list[cnt_proxy] print("Proxy is not working") Change_proxy() elif "with response code '429'" in str(e.args[0]): print("Proxy overloaded") Change_proxy() else: # TODO://Media except ProfilePage raise e

def take_proxy_list(proxy_file_name): global settings_list with open(proxy_file_name) as proxies: for proxy in proxies: elem = {"proxies": {re.search(r".*://", proxy).group(0)[:-3]: proxy.rstrip()}} settings_list.append(elem) account = Account(people) agent.update(account, settings=settings) biography = account.biography name = account.full_name

kirill568 commented 4 years ago

cnt_proxy = 0 settings = None settings_list = [None]

def Change_proxy(): global cnt_proxy global settings global settings_list if cnt_proxy == len(settings_list) - 1: cnt_proxy = 0 else: cnt_proxy += 1 settings = settings_list[cnt_proxy] print("Change proxy to", cnt_proxy)

def Exception_handler(e): global cnt_proxy global settings global settings_list if "Cannot connect to proxy." in str(e.args[0]): del settings_list[cnt_proxy] print("Proxy is not working") Change_proxy() elif "with response code '429'" in str(e.args[0]): print("Proxy overloaded") Change_proxy() else: # TODO://Media except ProfilePage raise e

def take_proxy_list(proxy_file_name): global settings_list with open(proxy_file_name) as proxies: for proxy in proxies: elem = {"proxies": {re.search(r".*://", proxy).group(0)[:-3]: proxy.rstrip()}} settings_list.append(elem) account = Account(people) agent.update(account, settings=settings) biography = account.biography name = account.full_name

Не пойму зачем всё это нужно, когда можно просто указать прокси и их использовать, вот так.

settings = {
    "proxies": {
        "http": "50.235.28.146:3128",
        "http": "23.97.101.222:80",
        "http": "200.89.178.73:8080",
        "http": "195.171.27.244:3128",
        "http": "109.226.233.31:3128",
        "http": "176.105.100.62:3128",
        "http": "165.22.44.147:80",
        "http": "167.71.59.12:8080",
        "http": "187.110.16.2:3128",
        "http": "144.217.74.219:3128",
        "http": "119.81.71.27:8123",
        "http": "103.35.64.12:3128",
        "http": "157.245.209.92:80",
        "http": "95.168.185.183:8080",
        "http": "173.192.21.89:25"
    },
}
agent.update(account, settings=settings)
biography = account.biography
name = account.full_name
SanzharMrz commented 3 years ago

cnt_proxy = 0 settings = None settings_list = [None] def Change_proxy(): global cnt_proxy global settings global settings_list if cnt_proxy == len(settings_list) - 1: cnt_proxy = 0 else: cnt_proxy += 1 settings = settings_list[cnt_proxy] print("Change proxy to", cnt_proxy) def Exception_handler(e): global cnt_proxy global settings global settings_list if "Cannot connect to proxy." in str(e.args[0]): del settings_list[cnt_proxy] print("Proxy is not working") Change_proxy() elif "with response code '429'" in str(e.args[0]): print("Proxy overloaded") Change_proxy() else: # TODO://Media except ProfilePage raise e def take_proxy_list(proxy_file_name): global settings_list with open(proxy_file_name) as proxies: for proxy in proxies: elem = {"proxies": {re.search(r".*://", proxy).group(0)[:-3]: proxy.rstrip()}} settings_list.append(elem) account = Account(people) agent.update(account, settings=settings) biography = account.biography name = account.full_name

Не пойму зачем всё это нужно, когда можно просто указать прокси и их использовать, вот так.

settings = {
    "proxies": {
      "http": "50.235.28.146:3128",
      "http": "23.97.101.222:80",
      "http": "200.89.178.73:8080",
      "http": "195.171.27.244:3128",
      "http": "109.226.233.31:3128",
      "http": "176.105.100.62:3128",
      "http": "165.22.44.147:80",
      "http": "167.71.59.12:8080",
      "http": "187.110.16.2:3128",
      "http": "144.217.74.219:3128",
      "http": "119.81.71.27:8123",
      "http": "103.35.64.12:3128",
      "http": "157.245.209.92:80",
      "http": "95.168.185.183:8080",
      "http": "173.192.21.89:25"
    },
}
agent.update(account, settings=settings)
biography = account.biography
name = account.full_name

так у Вас в словаре proxies, на все значения один ключ - "http"