如何使用Scryfall API和Python下载图像

时间:2019-03-13 17:10:41

标签: python json api

与此相关的API和Python相当新。我需要使用它们的API从Scryfall抓取图像。这是指向API文档的链接。 https://scryfall.com/docs/api

他们正在使用json,代码如下所示。 (https://api.scryfall.com/cards/cn2/78?format=json&pretty=true

这是包含图像URI的部分。

 "image_uris": {
    "small": "https://img.scryfall.com/cards/small/en/cn2/78.jpg?1517813031",
    "normal": "https://img.scryfall.com/cards/normal/en/cn2/78.jpg?1517813031",
    "large": "https://img.scryfall.com/cards/large/en/cn2/78.jpg?1517813031",
    "png": "https://img.scryfall.com/cards/png/en/cn2/78.png?1517813031",
    "art_crop": "https://img.scryfall.com/cards/art_crop/en/cn2/78.jpg?1517813031",
    "border_crop": "https://img.scryfall.com/cards/border_crop/en/cn2/78.jpg?1517813031"
  },

我将如何在这些URI处获取图像并下载它们?

我在github上找到了这个,但是我真的不确定从哪里开始。 https://github.com/NandaScott/Scrython

我正在使用此页面上的“默认卡”文件 https://scryfall.com/docs/api/bulk-data

1 个答案:

答案 0 :(得分:0)

您需要下载图像数据并将其保存在本地。第1步,使用Python获取图像数据:

import requests as req

img_uris = {
    "small": "https://img.scryfall.com/cards/small/en/cn2/78.jpg?1517813031",
    "normal": "https://img.scryfall.com/cards/normal/en/cn2/78.jpg?1517813031",
    "large": "https://img.scryfall.com/cards/large/en/cn2/78.jpg?1517813031",
    "png": "https://img.scryfall.com/cards/png/en/cn2/78.png?1517813031",
    "art_crop": "https://img.scryfall.com/cards/art_crop/en/cn2/78.jpg?1517813031",
    "border_crop": "https://img.scryfall.com/cards/border_crop/en/cn2/78.jpg?1517813031"
}

img_request = req.get(img_uris['normal'])
# Always test your response obj before performing any work!
img_request.raise_for_status()

函数raise_for_status()将引发requests在发出请求时遇到的任何异常。如果什么都没发生,则意味着我们收到了200个响应代码,表明我们的要求很好!现在执行第2步,保存数据:

import os
img_file = "queen_marchesa_norm.jpg"

with open(os.path.join(os.getcwd(), img_file), 'w') as f:
    f.write(img_request.content)

这里,我们声明一个文件名,使用该文件名创建一个可写的文件对象,然后将所有数据从img_request写入我们的文件对象。如果您想进一步了解requests,请检查documentation