with from and image python-3.x url download urllib

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