from - descargar imagen de url usando python urllib pero recibiendo HTTP Error 403: prohibido
urllib python 3 (4)
Algunos sitios requieren que pase credenciales a través de url
Deseo descargar el archivo de imagen de una url utilizando el módulo de python "urllib.request", que funciona para un sitio web (por ejemplo, mangastream.com), pero no funciona para otro (mangadoom.co) que recibe el error "HTTP Error 403: Prohibido" . ¿Cuál podría ser el problema para el último caso y cómo solucionarlo?
Estoy usando python3.4 en OSX.
import urllib.request
# does not work
img_url = ''http://mangadoom.co/wp-content/manga/5170/886/005.png''
img_filename = ''my_img.png''
urllib.request.urlretrieve(img_url, img_filename)
Al final del mensaje de error dijo:
...
HTTPError: HTTP Error 403: Forbidden
Sin embargo, funciona para otro sitio web
# work
img_url = ''http://img.mangastream.com/cdn/manga/51/3140/006.png''
img_filename = ''my_img.png''
urllib.request.urlretrieve(img_url, img_filename)
He intentado con las soluciones de la publicación a continuación, pero ninguna de ellas funciona en mangadoom.co.
Descargar una imagen a través de urllib y python
¿Cómo copio una imagen remota en python?
La solución aquí tampoco encaja porque mi caso es descargar la imagen. urllib2.HTTPError: HTTP Error 403: prohibido
La solución que no es Python también es bienvenida. Su sugerencia será muy apreciada.
Intento wget con la url en la terminal y funciona:
wget -O out_005.png http://mangadoom.co/wp-content/manga/5170/886/005.png
así que mi camino es usar la secuencia de comandos a continuación, y también funciona.
import os
out_image = ''out_005.png''
url = ''http://mangadoom.co/wp-content/manga/5170/886/005.png''
os.system("wget -O {0} {1}".format(out_image, url))
Puedes construir un abridor. Aquí está el ejemplo:
import urllib.request
opener=urllib.request.build_opener()
opener.addheaders=[(''User-Agent'',''Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1941.0 Safari/537.36'')]
urllib.request.install_opener(opener)
url=''''
local=''''
urllib.request.urlretrieve(url,local)
Por cierto, los siguientes códigos son los mismos:
(sin abrir)
req=urllib.request.Request(url,data,hdr)
html=urllib.request.urlopen(req)
(abrelatas incorporado)
html=operate.open(url,data,timeout)
Sin embargo, no podemos agregar el encabezado cuando utilizamos:
urllib.request.urlretrieve()
Entonces, en este caso, tenemos que construir un abridor.
Este sitio web está bloqueando el agente de usuario utilizado por urllib, por lo que debe cambiarlo en su solicitud. Lamentablemente, no creo que urlretrieve
apoye directamente.
Aconsejo para el uso de la hermosa biblioteca de requests
, el código se convierte (desde aquí ):
import requests
import shutil
r = requests.get(''http://mangadoom.co/wp-content/manga/5170/886/005.png'', stream=True)
if r.status_code == 200:
with open("img.png", ''wb'') as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
Tenga en cuenta que parece que este sitio web no prohíbe las requests
usuario-agente. Pero si necesita ser modificado, es fácil:
r = requests.get(''http://mangadoom.co/wp-content/manga/5170/886/005.png'',
stream=True, headers={''User-agent'': ''Mozilla/5.0''})
También es relevante: cambio de usuario-agente en urllib