Ошибка 429 при парсинге с сайта
Всем здравствуйте. Недавно написал программу, которая ищет контерпики для доты. Написал вручную словари, в которых описаны преимущества одного героя над другим. Но дело в том, что при каждом патче эти данные будут меняться, а их переписывать очень долго, поэтому хотел написать парсинг, чтобы не мучиться. Но тут появилась другая проблема, связанная с ошибкой 429 (Too many requests). Как я понял это сработала защита от DDOS-атак. Вот мой код:
import requests
from bs4 import BeautifulSoup as bs
import pandas as pd
allheroes = {'Dark Seer': 0, 'Shadow Demon': 0, 'Slark': 0, 'Pangolier': 0, 'Ancient Apparition': 0,
'Outworld Destroyer': 0, 'Monkey King': 0, 'Lina': 0, 'Razor': 0, 'Undying': 0, 'Necrophos': 0,
'Alchemist': 0, 'Rubick': 0, 'Keeper of the Light': 0, 'Lich': 0, 'Io': 0, 'Anti-Mage': 0,
'Earthshaker': 0, 'Death Prophet': 0, 'Marci': 0, 'Lone Druid': 0, 'Winter Wyvern': 0,
"Nature's Prophet": 0, 'Lycan': 0, 'Tinker': 0, 'Sniper': 0, 'Vengeful Spirit': 0, 'Hoodwink': 0,
'Oracle': 0, 'Kunkka': 0, 'Underlord': 0, 'Tidehunter': 0, 'Grimstroke': 0, 'Dawnbreaker': 0,
'Enchantress': 0, 'Drow Ranger': 0, 'Centaur Warrunner': 0, 'Bristleback': 0, 'Broodmother': 0,
'Primal Beast': 0, 'Lion': 0, 'Terrorblade': 0, 'Shadow Fiend': 0, 'Pugna': 0, 'Medusa': 0, 'Leshrac': 0,
'Phantom Assassin': 0, 'Viper': 0, 'Timbersaw': 0, 'Warlock': 0, 'Windranger': 0, 'Phantom Lancer': 0,
'Muerta': 0, 'Techies': 0, 'Bloodseeker': 0, 'Huskar': 0, 'Invoker': 0, 'Nyx Assassin': 0, 'Riki': 0,
'Elder Titan': 0, 'Snapfire': 0, 'Zeus': 0, 'Sven': 0, 'Lifestealer': 0, 'Ember Spirit': 0, 'Tiny': 0,
'Clockwerk': 0, 'Magnus': 0, 'Sand King': 0, 'Visage': 0, 'Dragon Knight': 0, 'Chaos Knight': 0,
'Dark Willow': 0, 'Weaver': 0, 'Gyrocopter': 0, 'Meepo': 0, 'Tusk': 0, 'Crystal Maiden': 0,
'Earth Spirit': 0, 'Omniknight': 0, 'Night Stalker': 0, 'Luna': 0, 'Disruptor': 0, 'Witch Doctor': 0,
'Morphling': 0, 'Mars': 0, 'Juggernaut': 0, 'Doom': 0, 'Treant Protector': 0, 'Spirit Breaker': 0,
'Dazzle': 0, 'Chen': 0, 'Wraith King': 0, 'Mirana': 0, 'Brewmaster': 0, 'Phoenix': 0, 'Naga Siren': 0,
'Ogre Magi': 0, 'Storm Spirit': 0, 'Jakiro': 0, 'Pudge': 0, 'Troll Warlord': 0, 'Slardar': 0,
'Beastmaster': 0, 'Void Spirit': 0, 'Shadow Shaman': 0, 'Templar Assassin': 0, 'Queen of Pain': 0,
'Faceless Void': 0, 'Venomancer': 0, 'Puck': 0, 'Bane': 0, 'Legion Commander': 0, 'Enigma': 0, 'Ursa': 0,
'Bounty Hunter': 0, 'Clinkz': 0, 'Skywrath Mage': 0, 'Arc Warden': 0, 'Spectre': 0, 'Axe': 0,
'Silencer': 0, 'Batrider': 0, 'Abaddon': 0}
# this what i have
antimage = {}
# and this what i want after parse
# antimage = {'Meepo': 9.7, 'Lone Druid': 4.53, 'Phantom Assassin': 4.34, 'Troll Warlord': 4.18, 'Slardar': 3.7,
# 'Legion Commander': 3.66, 'Huskar': 3.56, 'Terrorblade': 3.54, 'Monkey King': 3.46, 'Lina': 3.31,
# 'Earthshaker': 3.01, 'Shadow Fiend': 2.77, 'Templar Assassin': 2.75, 'Bloodseeker': 2.71, 'Io': 2.64,
# 'Enchantress': 2.63, 'Riki': 2.57, 'Hoodwink': 2.51, 'Beastmaster': 2.5, 'Tiny': 2.5, 'Ursa': 2.4,
# 'Pangolier': 2.39, 'Puck': 2.23, 'Night Stalker': 2.22, 'Slark': 2.22, 'Axe': 2.06, 'Marci': 1.98,
# 'Kunkka': 1.96, 'Sven': 1.88, 'Nyx Assassin': 1.84, 'Drow Ranger': 1.79, 'Viper': 1.67, 'Elder Titan': 1.63,
# "Nature's Prophet": 1.63, 'Disruptor': 1.54, 'Weaver': 1.42, 'Clinkz': 1.38, 'Chen': 1.23, 'Enigma': 1.2,
# 'Earth Spirit': 1.18, 'Windranger': 1.15, 'Dawnbreaker': 1.14, 'Venomancer': 1.08, 'Jakiro': 1.08,
# 'Luna': 1.04, 'Snapfire': 1.0, 'Ember Spirit': 1.0, 'Crystal Maiden': 0.98, 'Naga Siren': 0.8,
# 'Alchemist': 0.74, 'Phoenix': 0.72, 'Shadow Shaman': 0.7, 'Dazzle': 0.68, 'Spirit Breaker': 0.67,
# 'Mirana': 0.66, 'Shadow Demon': 0.59, 'Bounty Hunter': 0.59, 'Broodmother': 0.58, 'Doom': 0.57,
# 'Visage': 0.55, 'Grimstroke': 0.55, 'Silencer': 0.54, 'Techies': 0.5, 'Bane': 0.47,
# 'Centaur Warrunner': 0.47, 'Outworld Destroyer': 0.43, 'Timbersaw': 0.42, 'Magnus': 0.39, 'Tusk': 0.37,
# 'Rubick': 0.33, 'Sniper': 0.28, 'Batrider': 0.24, 'Lion': 0.14, 'Lycan': 0.11, 'Witch Doctor': 0.07,
# 'Lifestealer': 0.03, 'Keeper of the Light': -0.03, 'Warlock': -0.13, 'Primal Beast': -0.14,
# 'Dark Willow': -0.17, 'Invoker': -0.18, 'Muerta': -0.4, 'Treant Protector': -0.45, 'Vengeful Spirit': -0.46,
# 'Dragon Knight': -0.51, 'Death Prophet': -0.73, 'Undying': -0.75, 'Leshrac': -0.75, 'Chaos Knight': -0.8,
# 'Faceless Void': -0.8, 'Queen of Pain': -0.92, 'Void Spirit': -0.92, 'Dark Seer': -1.0, 'Tidehunter': -1.03,
# 'Bristleback': -1.04, 'Abaddon': -1.06, 'Skywrath Mage': -1.13, 'Oracle': -1.19, 'Necrophos': -1.25,
# 'Sand King': -1.33, 'Mars': -1.34, 'Pudge': -1.47, 'Omniknight': -1.5, 'Morphling': -1.51,
# 'Ogre Magi': -1.65, 'Underlord': -1.69, 'Razor': -1.75, 'Lich': -1.79, 'Pugna': -1.81, 'Brewmaster': -1.87,
# 'Phantom Lancer': -1.91, 'Clockwerk': -1.99, 'Gyrocopter': -2.15, 'Juggernaut': -2.17,
# 'Winter Wyvern': -2.49, 'Ancient Apparition': -2.67, 'Arc Warden': -2.82, 'Wraith King': -2.82,
# 'Tinker': -3.01, 'Storm Spirit': -3.36, 'Zeus': -3.54, 'Spectre': -4.22, 'Medusa': -6.98}
# searching counters for Anti-Mage hero
# (for example, but i want to search counters for all heroes automatically)
url = "https://www.dotabuff.com/heroes/anti-mage/counters"
# THATS MY PROBLEM
# Error: Too many requests 429
r = requests.get(url)
print(r.status_code)
# 429
# please help
Источник: Stack Overflow на русском