采集 base64 编码的图片
问题
爬虫抓取网页的时候,遇到有的图片是 base64 编码的格式,要怎样下载到本地呢?
示例:base64 编码的 img 标签
<!-- 内容太长省略一部分 -->
<img src="data:image/png;base64,/9j/4S/+RXhpZgAATU0AKgAAAAgAAAAAA...km7SSkpf/9k=">
解决方案
以上文为例,当我们解析到 src 属性后,可以做如下处理:
>>> import base64
>>>
>>> # src 属性
>>> src
'data:image/png;base64,/9j/4S/+RXhpZgAATU0AKgAAAAgAAAAAA...km7SSkpf/9k='
>>>
>>> # 提取内容部分
>>> info, b64_data = src.split('base64,', 1)
>>>
>>> # 提取文件格式
>>> fmt = info.split('image/')[-1].replace(';', '')
>>>
>>> # 解码内容
>>> binary_data = base64.urlsafe_b64decode(b64_data)
>>>
>>> # 保存到文件
>>> with open('this_image_was_from_base64.' + fmt, 'wb') as f:
... f.write(binary_data)
扩展
标准库中的 base64 模块也提供了
urlsafe_b64encode方法,可以将文件类型的对象编码为 base64,不过对于专注于爬虫业务的工作者基本可以无视Data URL 由
data:前缀、MIME 类型(表明数据类型)、base64 标志位(如果是文本,则可选)以及数据本身四部分组成,如:data:[<mediatype>][;base64],data
其中,mediatype 是一个MIME(Multipurpose Internet Mail Extension)类型字符串,如
image/jpeg表示一个 JPEG 图片文件。如果省略,默认值为text/plain;charset=US-ASCII,了解它的构成对于解析很有帮助
采集 base64 编码的图片的更多相关文章
- 浅析用Base64编码的图片优化网页加载速度
想必大家都知道网页加载的过程,从开始请求,到加载页面,开始解析和显示网页,遇到图片就再次向服务器发送请求,加载图片.如果图片很多的话,就会产生大量的http请求,从而影响页面的加载速度.所以现在有一种 ...
- Java Base64编码与图片互转
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...
- Base64编码与图片互转
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...
- BASE64编码的图片在网页中的显示问题的解决
BASE64位转码有两种: 一种是图片转为Base64编码,这种编码是直接可以在页面通过<img src='base64编码'/>的方式显示 Base64 在CSS中的使用 .demoIm ...
- Android开发 - ImageView加载Base64编码的图片
在我们开发应用的过程中,并不是所有情况下都请求图片的URL或者加载本地图片,有时我们需要加载Base64编码的图片.这种情况出现在服务端需要动态生成的图片,比如: 二维码 图形验证码 ... 这些应用 ...
- 把一个base64编码的图片绘制到canvas (canvas的图片在转成dataurl)
把一个base64编码的图片绘制到canvas 需要引入jquery. <canvas id="myCanvas" width="800" height= ...
- 问题:C#将base64转换成二进制图片;结果:c# Base64编码和图片的互相转换代码
c# Base64编码和图片的互相转换代码 Base64编码在Web方面有很多应用,譬如在URL.电子邮件方面.网上有很多相关的资源用于提供Base64编码和其他编码的转换,.Net Framewor ...
- 将base64编码转换图片
/// <summary> /// 二进制Base64编码转图片 /// </summary> /// <param name="bytes"> ...
- base64编码转图片
protected void Button1_Click(object sender, EventArgs e) { //strImg为base64编码的图片字符串 string strImg = & ...
随机推荐
- [loj3342]制作菜品
当$n-1\le m$,不妨令$d_{1}\le d_{2}\le...\le d_{n}$,则$(n-1)k\le mk=\sum_{i=1}^{n}d_{i}\le d_{1}+(n-1)d_{n ...
- 不用Spring Boot的痛苦是什么?用了Spring Boot以后的好处是什么?
1.不用Spring Boot的痛苦是什么? (1)各种技术整合在一起,版本混乱,大量依赖自己去找,依赖冲突 (2)基于xml格式的配置文件,对各种技术框架进行大量的繁琐配置,mvc-servlet. ...
- patch增量更新
- 洛谷 P6177 - Count on a tree II/【模板】树分块(树分块)
洛谷题面传送门 好家伙,在做这道题之前我甚至不知道有个东西叫树分块 树分块,说白了就是像对序列分块一样设一个阈值 \(B\),然后在树上随机撒 \(\dfrac{n}{B}\) 个关键点,满足任意一个 ...
- 监听浏览器tab切换
监听浏览器切屏 为了完成验证用户在切换浏览器tab时进行登录再次认证需求需要监听浏览器切换窗口 if (document.hidden !== undefined) { document.addEve ...
- DirectX12 3D 游戏开发与实战第十章内容(上)
仅供个人学习使用,请勿转载.谢谢! 10.混合 本章将研究混合技术,混合技术可以让我们将当前需要光栅化的像素(也称为源像素)和之前已经光栅化到后台缓冲区的像素(也称为目标像素)进行融合.因此,该技术可 ...
- IDE 常用配置
启动进入欢迎页(项目选择页),而非直接进入项目 File > Settings > Appearance & Behavior > System Settings 在Star ...
- 金蝶EAS——登录某个数据中心门户时报错“获取用户相关信息失败!请查看服务器日志,并确认是否数据库设置错误或者版本不匹配!”
登录服务器后台,查看金蝶BOS控制台,选择数据中心中的目标数据中心,点击测试连接,提示报错如下: 说明是数据库问题,需要登录数据库服务器去检查数据库.详细操作见:
- react native 导航器 Navigator 简单的例子
最近学习react native 是在为全栈工程师而努力,看网上把react native说的各种好,忍不住学习了一把.总体感觉还可以,特别是可以开发android和ios这点非常厉害,刚开始入门需要 ...
- python第三天 列表和元组
枚举 for in enumerate 循环输出字符串的内容并且输出它的索引信息: #判断索引为5的字符串是不是"您" is in Python提供了⼤量的内置数据结构,包含了列表 ...