今天在写爬虫时发现,img标签的src不是以往的链接,而是一串我看不懂的字符。
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAIAAAA
7ljmRAAAAGElEQVQIW2P4DwcMDAxAfBvMAhEQMYgcACEHG8ELxtbPAAAAAElFTkSuQmCC" />
介绍
网上搜了一下,原来这种东西叫做Data URI Scheme,目的是为了减少网络请求的次数,因为如果src属性的值是url,那么就需要额外的一次请求获取图片。
分析一下这串字符:
- data - 取得数据的协定名称
- image/png - 数据类型名称
- base64 - 数据的编码方法
- iVBOR.... - 编码后的数据
其实,说的直白点,就是将图片数据进行编码,然后放在src属性中。
图片获取
Data URI Scheme技术主要用于图片,那么如何获取这类图片呢?
浏览器
对于一般的浏览器,直接将src属性的值放到浏览器的地址栏,就能打开图片了,打开图片看,可以通过浏览器进行图片的下载等操作,如:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAIAAAA
7ljmRAAAAGElEQVQIW2P4DwcMDAxAfBvMAhEQMYgcACEHG8ELxtbPAAAAAElFTkSuQmCC
代码中
如果是在代码中,之前讲了,本质上其实是图片数据编码,那么只需要获取到编码后的字符串,然后解码,之后写入文件就行了。
可以根据编码方法进行解码,之后再根据数据类型写入文件即可。
附上Python代码:
import base64
src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAIAAAA
7ljmRAAAAGElEQVQIW2P4DwcMDAxAfBvMAhEQMYgcACEHG8ELxtbPAAAAAElFTkSuQmCC"
data = src.split(',')[1]
image_data = base64.b64decode(data)
with open('1.gif', 'wb') as f:
f.write(image_data)