无法使用 python 下载图片
can't download image with python
尝试使用 python 下载图像
但是只有这张图下载不了
我不知道什么原因导致当我 运行 它时,它就停止了,什么也没有发生
没有图像,没有错误代码...
这是代码,请告诉我原因和解决方案...
import urllib.request
num=404
def down(URL):
fullname=str(num)+"jpg"
urllib.request.urlretrieve(URL,fullname)
im="https://www.thesun.co.uk/wp-content/uploads/2020/09/67d4aff1-ddd0-4036-a111-3c87ddc0387e.jpg"
down(im)
此代码适用于您尝试更改您使用的 url 并查看结果:
import requests
pic_url = "https://www.thesun.co.uk/wp-content/uploads/2020/09/67d4aff1-ddd0-4036-a111-3c87ddc0387e.jpg"
cookies = dict(BCPermissionLevel='PERSONAL')
with open('aa.jpg', 'wb') as handle:
response = requests.get(pic_url, headers={"User-Agent": "Mozilla/5.0"}, cookies=cookies,stream=True)
if not response.ok:
print (response)
for block in response.iter_content(1024):
if not block:
break
handle.write(block)
@MoetazBrayek 在他们的评论(但不是回答)中所说的是正确的:您正在查询的网站阻止了请求。
网站通常会根据用户代理或引荐来源网址来阻止请求:如果您尝试curl https://www.thesun.co.uk/wp-content/uploads/2020/09/67d4aff1-ddd0-4036-a111-3c87ddc0387e.jpg
,您将收到 HTTP 错误(403 访问被拒绝):
❯ curl -I https://www.thesun.co.uk/wp-content/uploads/2020/09/67d4aff1-ddd0-4036-a111-3c87ddc0387e.jpg
HTTP/2 403
显然 The Sun 想要一个浏览器的用户代理,特别是字符串“mozilla”就足以通过:
❯ curl -I -A mozilla https://www.thesun.co.uk/wp-content/uploads/2020/09/67d4aff1-ddd0-4036-a111-3c87ddc0387e.jpg
HTTP/2 200
您将不得不切换到 requests
程序包或将您的 url 字符串替换为适当的 urllib.request.Request
对象,以便您可以自定义请求的更多部分。显然 urlretrieve
不支持 Request 对象,因此您还必须使用 urlopen
:
req = urllib.request.Request(URL, headers={'User-Agent': 'mozilla'})
res = urllib.request.urlopen(req)
assert res.status == 200
with open(filename, 'wb') as out:
shutil.copyfileobj(res, out)
尝试使用 python 下载图像
但是只有这张图下载不了
我不知道什么原因导致当我 运行 它时,它就停止了,什么也没有发生
没有图像,没有错误代码...
这是代码,请告诉我原因和解决方案...
import urllib.request
num=404
def down(URL):
fullname=str(num)+"jpg"
urllib.request.urlretrieve(URL,fullname)
im="https://www.thesun.co.uk/wp-content/uploads/2020/09/67d4aff1-ddd0-4036-a111-3c87ddc0387e.jpg"
down(im)
此代码适用于您尝试更改您使用的 url 并查看结果:
import requests
pic_url = "https://www.thesun.co.uk/wp-content/uploads/2020/09/67d4aff1-ddd0-4036-a111-3c87ddc0387e.jpg"
cookies = dict(BCPermissionLevel='PERSONAL')
with open('aa.jpg', 'wb') as handle:
response = requests.get(pic_url, headers={"User-Agent": "Mozilla/5.0"}, cookies=cookies,stream=True)
if not response.ok:
print (response)
for block in response.iter_content(1024):
if not block:
break
handle.write(block)
@MoetazBrayek 在他们的评论(但不是回答)中所说的是正确的:您正在查询的网站阻止了请求。
网站通常会根据用户代理或引荐来源网址来阻止请求:如果您尝试curl https://www.thesun.co.uk/wp-content/uploads/2020/09/67d4aff1-ddd0-4036-a111-3c87ddc0387e.jpg
,您将收到 HTTP 错误(403 访问被拒绝):
❯ curl -I https://www.thesun.co.uk/wp-content/uploads/2020/09/67d4aff1-ddd0-4036-a111-3c87ddc0387e.jpg
HTTP/2 403
显然 The Sun 想要一个浏览器的用户代理,特别是字符串“mozilla”就足以通过:
❯ curl -I -A mozilla https://www.thesun.co.uk/wp-content/uploads/2020/09/67d4aff1-ddd0-4036-a111-3c87ddc0387e.jpg
HTTP/2 200
您将不得不切换到 requests
程序包或将您的 url 字符串替换为适当的 urllib.request.Request
对象,以便您可以自定义请求的更多部分。显然 urlretrieve
不支持 Request 对象,因此您还必须使用 urlopen
:
req = urllib.request.Request(URL, headers={'User-Agent': 'mozilla'})
res = urllib.request.urlopen(req)
assert res.status == 200
with open(filename, 'wb') as out:
shutil.copyfileobj(res, out)