使用Requests下载图片并使用openpyxl将图片写入Excel中
之前爬取的数据,是直接把图片url放在Excel中的,或者直接下载到一个目录中,或者转存到自家服务器上,拿到新的链接。
这边收到需求要求把图片缩小到140*140直接放到Excel单元格中,操作如下。
使用Requests下载图片#
使用Requests下载单张图片,只要将相应对象的二进制内容,二进制格式保存即可,示例如下:
import requests
url = 'https://www.bulgari.cn/media/catalog/product/cache/17a97ae74dcd05e3600304dfd5afbc49/3/5/356325_001.png'
res = requests.get(url)
file_name = url.split('/')[-1]
with open(file_name, 'wb') as f:
f.write(res.content)
如果图片较大,为了优化性能,可以分块写入:
...
with open(file_name, 'wb') as f:
for data in res.iter_content(128):
f.write(data)
使用openpyxl,在Excel中插入图片#
使用openpyxl,可以使用sheet对象的add_image('图片文件路径或Image对象', '锚点')来在一个单元格中插入对象,使用openpyxl中的Image对象还可以设置图片尺寸。示例如下。
from openpyxl import Workbook
from openpyxl.drawing.image import Image
wb = Workbook()
sh = wb.active
img = Image('demo.png')
img.width, img.height=140, 140
sh.add_image(img, 'A1')
wb.save('demo.xlsx')
另外可以通过sh.column_dimensions['A'].width=140来设置列宽,通过 sh.row_dimensions[1].height=140来设置行高。
完整代码#
import requests
from openpyxl import Workbook
from openpyxl.drawing.image import Image
IMG_COL = 'A'
def save_img(url):
res = requests.get(url)
file_name = url.split('/')[-1]
with open(file_name, 'wb') as f:
for data in res.iter_content(128):
f.write(data)
return file_name
def insert_img(sh, line, file_name):
sh.row_dimensions[line].height=140
img = Image(file_name)
img.width, img.height=140, 140
sh.add_image(img, 'A1')
if __name__ == "__main__":
wb = Workbook()
sh = wb.active
sh.column_dimensions[IMG_COL].width=140
url = 'https://www.bulgari.cn/media/catalog/product/cache/17a97ae74dcd05e3600304dfd5afbc49/3/5/356325_001.png'
file_name = save_img(url)
insert_img(sh, 1, file_name)
wb.save('demo.xlsx')
多张图片,添加循环即可。
作者:韩志超
出处:https://www.cnblogs.com/superhin/p/12188265.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
如有问题,请微信联系 superz-han,并发送原文链接。
分类:
Python
/* 请我喝杯咖啡吧 */
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥