📜  图像下载 - Python (1)

📅  最后修改于: 2023-12-03 15:37:16.469000             🧑  作者: Mango

图像下载 - Python

在Python中下载图像可以用多种方式来实现,下面详细介绍几种常见的方法。

1. 使用requests库下载图像

使用requests库可以下载图像的二进制数据,然后将其保存为图像文件。

import requests
import shutil

url = 'https://www.python.org/static/community_logos/python-powered-h-100x130.png'
response = requests.get(url, stream=True)

with open('python_logo.png', 'wb') as out_file:
    shutil.copyfileobj(response.raw, out_file)

这里的response对象包含原始的二进制图像数据,使用shutil将数据复制到本地文件中。

2. 使用urllib库下载图像

另一种常见的下载图像的方法是使用urllib库,它可以从指定的URL下载图像。同样,下载的二进制数据可以保存为本地文件。

import urllib.request

url = 'https://www.python.org/static/community_logos/python-powered-h-100x130.png'
urllib.request.urlretrieve(url, 'python_logo.png')

以上代码中,使用urlretrieve()方法将二进制数据保存到本地文件中。

3. 使用Pillow库下载图像

Pillow库是Python中广泛使用的图像处理库,除了支持图像处理操作外,它还可以用来下载图像。具体实现可以使用Pillow库中的Image对象。

from PIL import Image
import requests
import io

url = 'https://www.python.org/static/community_logos/python-powered-h-100x130.png'
response = requests.get(url)
img = Image.open(io.BytesIO(response.content))
img.save('python_logo.png')

这里使用了requests库将图像二进制数据读取进来,然后将BytesIO对象转化为Image对象,最后将图像保存到本地文件中。

4. 使用Scrapy库下载图像

Scrapy库是一款Python爬虫框架,它天生具有下载图像的能力,而且还可以下载任何类型的文件。

import scrapy

class ImageSpider(scrapy.Spider):
    name = 'image_spider'
    start_urls = ['https://www.python.org/']

    def parse(self, response):
        img_urls = response.css('img::attr(src)').getall()
        yield {'image_urls': img_urls}

以上代码定义了一个爬虫,它会根据start_urls中的网页链接开始爬取图像。爬虫中使用的parse()方法是解析网页的函数。通过response.css()方法获取所有网页中图像的URL,最后将其保存在字典中返回,这里定义了image_urls键。

爬虫中下载图像的具体工作是在settings.py中实现的。先将Scrapy库默认禁用的图片下载功能开启,然后指定下载图片保存的路径。

ITEM_PIPELINES = {'scrapy.pipelines.images.ImagesPipeline': 1}
IMAGES_STORE = '/path/to/your/location'

在上述代码中,scrapy.pipelines.images.ImagesPipeline是Scrapy库中默认的处理图片的管道,IMAGES_STORE定义了图像文件保存的目录。在以上逻辑实现完后,运行scrapy crawl image_spider即可在指定目录下下载所有的图像。