Задать вопрос
Этот вопрос закрыт для ответов, так как повторяет вопрос Как парсить без бана?
valexeich
@valexeich

Как обойти блокировки сайтов?

Мне нужно часто делать запрос на один url (каждые 10 сек), но сайт после 3-4 запросов меня блочит и дает 429, пробовал менять ip для каждого запроса с помощью tor, но не помогло.

Вот код:
ua = UserAgent()

SOCKS_PORT = 9050

TOR_PATH = os.path.normpath(os.getcwd()+"\\Tor\\tor\\tor.exe")

tor_process = stem.process.launch_tor_with_config(
config = {
    'SocksPort': str(SOCKS_PORT),
    'StrictNodes' : '1',
    'CookieAuthentication' : '1',
    'MaxCircuitDirtiness' : '10',
    'GeoIPFile' : 'https://raw.githubusercontent.com/torproject/tor/main/src/config/geoip'
},
init_msg_handler = lambda line: print(line) if re.search('Bootstrapped', line) else False,
tor_cmd = TOR_PATH
)

PROXIES = {
    'http': 'socks5://127.0.0.1:9050',
    'https': 'socks5://127.0.0.1:9050'
}

url = 'https://steamcommunity.com/market/listings/730/AWP%20%7C%20Atheris%20%28Minimal%20Wear%29/render/?query=&start=0&count=100&currency=18'

for i in range(10):
    response = requests.get("http://ip-api.com/json/", proxies=PROXIES)
    result = response.json()
    print('TOR IP [%s]: %s %s'%(datetime.now().strftime("%d-%m-%Y %H:%M:%S"), result["query"], result["country"]))
    headers = {
        'User-Agent': ua.random
    }
    resp_test = requests.get(url, proxies=PROXIES, headers=headers)
    print(resp_test)
    time.sleep(11)

tor_process.kill()


Вывод:

64b802bcbd00a145440317.jpeg

Подскажите как решаются такие проблемы, может нужен платный прокси или как?
  • Вопрос задан
  • 565 просмотров
Подписаться 2 Простой 7 комментариев
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Вы столкнулись с типичным конфликтом интересов. Видимо стиму не выгодна ваша деятельность и они хотят её осложнить для вас, сделать её для вас дороже.
Это как борьба с читерством.
Никто вам не скажет правил, по которым вас блокируют, иначе вы тут же начнёте их обходить. Более того, чтобы правила не обходили, их рандомизируют, динамически меняют, разносят во времени момент принятия решения о недобросовестности клиента и момент его блокировки, чтобы нельзя было по своим действиям и реакции системы блокирования понять и вычислить правила блокировки. Лаг между этими моментами всячески варьируют, рандомизируют, дают разное число попыток, чтобы осложнить подбор и вычисление граничных критериев системы защиты.

Не факт, конечно, что там именно такая параноидальная и замороченная система, но такое определённо имеет смысл, если надо предотвратить долбёжку и не целевое использование АПИ.

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

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

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы