2017-07-11 7 views
1

gars Hei, je suis en train d'obtenir une image en utilisant BeautifulSoup mais je reçois une erreur en le faisant:urlretrieve pour l'image renvoie l'erreur HTTP 403: Interdit

Voici mon code:

imgUrl = "https://www.residentadvisor.net/images/events/flyer/2017/7/no-0713-986042-front.jpg" 
try: 
    urlretrieve(imgUrl, "testPhytonImg.jpg") 
except FileNotFoundError as err: 
    print("something wrong with local path") 
    print(err) # something wrong with local path 
except HTTPError as err: 
    print("something wrong with url") 
    print(err) # something wrong with url 

Et c'est l'erreur que je reçois: HTTP Error 403: Forbidden

Et pourquoi je l'obtiens? Est-ce que l'accès à l'image est bloqué à cause de quelque chose que je fais ou y a-t-il un autre moyen pour cela?

+0

Ceci semble être hébergé sur Cloudflare, et ils ont une détection de bot très "agressive" en place. – CBroe

+0

Comment utiliseriez-vous 'BeautifulSoup' sur un jpeg? –

Répondre

4

Cela fonctionne pour moi. Vous devez ajouter un en-tête de requête

import urllib.request 
url_address = "https://www.residentadvisor.net/images/events/flyer/2017/7/no-0713-986042-front.jpg" 
headers={'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11', 
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
    'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 
    'Accept-Encoding': 'none', 
    'Accept-Language': 'en-US,en;q=0.8', 
    'Connection': 'keep-alive'} 
request_=urllib.request.Request(url_address,None,headers) #The assembled request 
response = urllib.request.urlopen(request_)# store the response 
#create a new file and write the image 
f = open('00000001.jpg','wb') 
f.write(response.read()) 
f.close()