• 使用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')
    

    保存后,打开Excel,效果如下。

    另外可以通过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')
    

    多张图片,添加循环即可。

  • 相关阅读:
    我开发的Quartz Cron表达式生成器
    web前端css定位position和浮动float
    ecmall模板编辑中的标题如何自定义读取
    记录一个项目的需求探讨过程
    这些记录
    今日工作总结:jquery轮转效果的集成与前台页面banner的设计思路总结
    小问题总结:鼠标点击到输入框(input)里的时候,输入框的提示消失,鼠标再移开,输入框提示出现
    web app与app的区别,即html5与app的区别
    3月初的日记:网站工作记录
    [接口]支付宝接口开发集成支付环境开发总结
  • 原文地址:https://www.cnblogs.com/superhin/p/12188265.html
Copyright © 2020-2023  润新知