使用Python的urllib但接收HTTP错误403从网址下载图片:故宫使用Python的urll

2019-05-12 05:53发布

我想从使用Python模块“urllib.request里”的URL,接收错误,适用于一些网站(如mangastream.com),但对另一个(mangadoom.co)不起作用下载映像文件“HTTP错误403:禁止访问” 。 有什么能为后者的情况下,如何解决它的问题呢?

我使用OSX python3.4。

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)

在错误信息的最后它说:

... 
HTTPError: HTTP Error 403: Forbidden

但是,它适用于其他网站

# 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)

我试图从以下职位的解决方案,但它们都没有工作在mangadoom.co。

通过urllib而蟒蛇下载图片

如何在python复制远程图像?

该解决方案还这里不适合,因为我的情况是,下载图像。 urllib2.HTTPError:HTTP错误403:禁止

非蟒蛇解决方案也欢迎。 你的建议将非常赞赏。

Answer 1:

这个网站是通过阻止使用urllib的用户代理,所以你需要改变它在你的要求。 不幸的是,我不认为urlretrieve直接支持这一点。

我建议对使用美丽的requests库,代码为(从这里 ):

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)

需要注意的是,似乎这个网站不forbide requests用户代理。 但是,如果需要修改,很容易:

r = requests.get('http://mangadoom.co/wp-content/manga/5170/886/005.png',
                 stream=True, headers={'User-agent': 'Mozilla/5.0'})

也与此有关: 改变用户代理urllib中



Answer 2:

你可以建立一个开门红。 这里的例子:

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)

顺便说一句,下面的代码是相同的:

(无开罐器)

req=urllib.request.Request(url,data,hdr)   
html=urllib.request.urlopen(req)

(开启器建造)

html=operate.open(url,data,timeout)

但是,我们不能当我们使用添加标题:

urllib.request.urlretrieve()

所以在这种情况下,我们必须建立一个开门红。



Answer 3:

我尝试wget的与终端的URL,它的工作原理:

wget -O out_005.png  http://mangadoom.co/wp-content/manga/5170/886/005.png

所以在我的方法是使用下面的脚本,它也能工作。

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))


文章来源: download image from url using python urllib but receiving HTTP Error 403: Forbidden