如何在python中解析data-uri?

dan*_*ast 4 python base64 image data-uri

HTML图像元素具有以下简化格式:

<img src='something'>
Run Code Online (Sandbox Code Playgroud)

那可能是data-uri,例如:

data:image/png;base64,iVBORw0KGg...
Run Code Online (Sandbox Code Playgroud)

有没有一种标准的方法来解析这个python,所以我得到content_type和base64数据分开,或者我应该为此创建自己的解析器?

JRo*_*ite 12

拆分逗号上的数据URI以获取没有标头的base64编码数据.调用base64.b64decode将其解码为字节.最后,将字节写入文件.

from base64 import b64decode

data_uri = "data:image/png;base64,iVBORw0KGg..."
header, encoded = data_uri.split(",", 1)
data = b64decode(encoded)

with open("image.png", "wb") as f:
    f.write(data)
Run Code Online (Sandbox Code Playgroud)

  • 仅在第一个逗号上分割不一定是正确的,MIME 也可能包含逗号,例如:`data:video/webm; 编解码器=\“vp8,opus\”;base64,GkXfowEAAAAAAAAAAfQoaBAUL3g...` (2认同)
  • 引号也无济于事,因为这也是可能的:`data:video/webm;codecs=vp8,opus;base64,GkXfo59...` (2认同)

bl7*_*l79 11

Python 从 3.4 开始支持 data-uri。在引擎盖下使用urllib.request .DataHandler。

from urllib.request import urlopen

with urlopen(data_uri) as response:
    data = response.read()
Run Code Online (Sandbox Code Playgroud)


Mik*_*bov 7

w3lib(Scrapy使用的库)具有解析数据uris 的功能:

>>> from w3lib.url import parse_data_uri
>>> parse_data_uri('data:image/png;base64,iVBORw0KGg==')
ParseDataURIResult(media_type='image/png', media_type_parameters={}, data=b'\x89PNG\r\n\x1a')
Run Code Online (Sandbox Code Playgroud)

  • 恕我直言,最漂亮的解决方案:简短并产生结构良好的结果 (2认同)