Je veux ouvrir une URL en utilisant urllib.request.urlopen('someurl')
:
with urllib.request.urlopen('someurl') as url:
b = url.read()
Je continue à avoir l'erreur suivante:
urllib.error.HTTPError: HTTP Error 403: Forbidden
Je comprends que l'erreur est due au site qui ne laisse pas python y accéder, pour empêcher les bots de gaspiller leurs ressources réseau - ce qui est compréhensible. J'ai effectué une recherche et découvert qu'il fallait changer l'agent utilisateur. Cependant, tous les guides et solutions que j'ai trouvés pour résoudre ce problème quant à la modification de l'agent utilisateur ont été utilisés avec urllib2, et j'utilise python 3, de sorte que toutes les solutions ne travail.
Comment puis-je résoudre ce problème avec python 3?
De la documentation Python :
import urllib.request
req = urllib.request.Request(
url,
data=None,
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
}
)
f = urllib.request.urlopen(req)
print(f.read().decode('utf-8'))
from urllib.request import urlopen, Request
urlopen(Request(url, headers={'User-Agent': 'Mozilla'}))
Je viens de répondre à une question similaire ici: https://stackoverflow.com/a/43501438/20682
Si vous souhaitez non seulement ouvrir l'URL, mais également télécharger la ressource (par exemple, un fichier PDF)), vous pouvez utiliser le code ci-dessous:
# proxy = ProxyHandler({'http': 'http://192.168.1.31:8888'})
proxy = ProxyHandler({})
opener = build_opener(proxy)
opener.addheaders = [('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30')]
install_opener(opener)
result = urlretrieve(url=file_url, filename=file_name)
La raison pour laquelle j'ai ajouté un proxy est de surveiller le trafic dans Charles, et voici le trafic que j'ai eu: