Python使用requests模块下载图片的两种实现方式

拾柒
拾柒
发布时间:2026-10-12| 3人浏览过
原创

本文介绍如何使用Python的requests模块下载图片。通过设置User-Agent模拟浏览器请求,利用stream=True启用流式传输,分块写入文件以节省内存。提供了基础实现与使用contextlib.closing优化的两种代码示例,确保连接正确关闭。

使用requests模块下载图片

在Python中,使用 requests 库下载图片是一个常见的需求。为了模拟浏览器行为并避免被服务器拒绝,通常需要设置 headers 中的 User-Agent。此外,对于较大的图片文件,推荐使用流式传输(streaming)方式,即设置 stream=True,这样可以分块读取内容并写入本地文件,避免一次性加载整个响应体到内存中。

基础实现:分块写入文件

以下代码展示了如何下载图片并保存为 demo.jpg。通过 response.iter_content(128) 每次读取128字节的数据块,并写入打开的文件对象中。

# -*- coding: utf-8 -*-
import requests
def download_image():
  """
  demo:下载图片
  :return:
  """
  headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"}
  url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1491366667515&di=8dad3d86740af2c49d3d0461cfd81f63&imgtype=0&src=http%3A%2F%2Fhdn.xnimg.cn%2Fphotos%2Fhdn521%2F20120528%2F1615%2Fh_main_LBxi_2917000000451375.jpg"
  response = requests.get(url, headers=headers, stream=True)
  #print str(response.text).decode('ascii').encode('gbk')
  with open('demo.jpg', 'wb') as fd:
    for chunk in response.iter_content(128):
      fd.write(chunk)
download_image()

优化实现:使用contextlib关闭连接

在基础实现中,如果发生异常,网络连接可能不会被正确关闭。为了更规范地处理资源释放,可以使用 contextlib.closing 来确保响应对象在使用完毕后自动关闭连接。这种方式更加健壮,适用于生产环境。

def download_image_improved():
  """demo: 下载图片"""
  #伪造headers信息
  headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"}
  #限定URL
  url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1491366667515&di=8dad3d86740af2c49d3d0461cfd81f63&imgtype=0&src=http%3A%2F%2Fhdn.xnimg.cn%2Fphotos%2Fhdn521%2F20120528%2F1615%2Fh_main_LBxi_2917000000451375.jpg"
  response = requests.get(url, headers=headers, stream=True)
  from contextlib import closing
  #用完流自动关掉
  with closing(requests.get(url, headers=headers, stream=True)) as response:
    #打开文件
    with open('demo1.jpg', 'wb') as fd:
      #每128写入一次
      for chunk in response.iter_content(128):
        fd.write(chunk)
download_image_improved()

运行上述代码后,当前目录下将生成 demo.jpg 或 demo1.jpg 文件,即为下载的图片。

以上就是Python使用requests模块下载图片的详细内容,更多关于Python网络请求的资料请关注本站其它相关文章!
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。