使用Python3中的请求下载图像

时间:2019-07-16 10:28:12

标签: python web-scraping python-requests

我需要使用Python从URL下载图像。我正在这样做:

import requests

with requests.get(url, stream=True) as r:
    with open(img_path, "wb") as f:
        f.write(r.content)

为了让我在浏览器中看到图像,我需要登录该站点上的帐户。图片可能是别人或我自己发送的。

问题是我能够成功下载一些图像,但对于其他图像,则出现身份验证错误,即我尚未登录。

在这种情况下,有时也会下载内容如下的文件:

{"result":"error","msg":"Not logged in: API authentication or user session required"}

有时,它会下载网页的html文件,要求我登录以查看图像。

为什么在某些情况下而不是其他情况下会出现此错误?以及我该如何解决?

2 个答案:

答案 0 :(得分:1)

尝试:

import requests

image_url = "https://www.python.org/static/community_logos/python-logo-master-v3-TM.png"
img_data = requests.get(image_url).content
with open('image_name.jpg', 'wb') as handler:
    handler.write(img_data)

注意:

获得授权

from requests.auth import HTTPBasicAuth
img_data = requests.get('image_url', auth=HTTPBasicAuth('user', 'pass')).content

答案 1 :(得分:0)

您可以使用response.raw文件对象,也可以遍历响应。

import requests
import shutil
from requests.auth import HTTPBasicAuth

r = requests.get(url, auth=HTTPBasicAuth('user', 'pass'), stream=True)
if r.status_code == 200:
    with open(path, 'wb') as f:
        r.raw.decode_content = True
        shutil.copyfileobj(r.raw, f)