2
votes

Tenter de télécharger le fichier json à partir de DnDBeyond donne une erreur 403

Je suis en train de créer un bot D&D qui télécharge les feuilles de personnage de DnDBeyond. Malheureusement, la tentative de téléchargement du fichier json pour un personnage accessible au public renvoie une erreur 403.

J'essaye de télécharger cette feuille de personnage: https://www.dndbeyond.com/characters/22738330/json

qui est accessible au public et devrait renvoyer un fichier json.

J'ai utilisé le code suivant:

import requests
url = "https://www.dndbeyond.com/characters/22738330/json"
response = requests.get(url)
print(response.json())

Ce qui continue de renvoyer une erreur 403 malgré le fait que je suis capable de charger le personnage sur mon navigateur en cliquant simplement dessus. Où vais-je mal?


3 commentaires

Combien de fois avez-vous exécuté ce script? Le site Web peut vous refuser une utilisation excessive.


En outre, les URL dans le corps de la question et l'exemple de code ne correspondent pas. L'URL de code n'a pas /json à la fin.


Ajoutez des en- headers dans votre script. cette URL renvoie des données HTML , utilisez donc response.content.


3 Réponses :


0
votes

Ce site protégé par https://www.perimeterx.com/whywasiblocked/

Il détecte que vous n'êtes pas un utilisateur réel et vous refuse l'accès. vérifiez la sortie de response.text dans votre script.


2 commentaires

Comment trouvez-vous que le site est protégé par PerimeterX?


vérifiez la sortie de response.text dans votre script: ... Propulsé par <a href=" perimeterx.com/whywasiblocked"> PerimeterX </ a > ...



1
votes

Essayez d'ajouter un User-Agent valide et d'autres en-têtes pour donner l'impression que vous accédez via un navigateur.

Quelque chose comme ça:

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3835.0 Safari/537.36',
       'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
       'Host':'www.dndbeyond.com',
       'Accept-Language': 'en-US,en;q=0.5',
       'Accept-Encoding': 'gzip, deflate',
       'Upgrade-Insecure-Requests': '1',
       'Connection': 'close'
    }


response = requests.get(url, headers=headers)


1 commentaires

Cela ne télécharge que le HTML, pas le JSON. Mais c'est un début.



0
votes

Pour accéder au json, vous devez supprimer le pluriel sur le composant de chemin "caractères".

En ce qui concerne le format des données, j'ai presque terminé d'étoffer toute la structure.

La source Objective-C inclut toutes les définitions de classe.

https://github.com/mouser/BeyondDnD


0 commentaires