You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将图片存入CSV?现有实现问题求助

解决方案说明

CSV格式本身不支持直接嵌入图片,这是格式的设计限制。要实现「图片嵌入表格、内容整合到单个文件」的效果,推荐使用Excel(.xlsx)格式,它原生支持图片嵌入,且能把所有数据和图片打包到一个文件里。

针对你代码中的问题,逐一修复如下:

  1. 消除插入图片的警告:原代码用i*idx计算行号,会出现0或负数(比如i=0、idx=0时),但Excel行号从1开始,改用连续的行号计数器即可解决。
  2. 解决空列与内容错位:统一数据写入和图片插入的行号,确保每一行数据对应正确的图片位置。
  3. 避免生成独立图片文件:用内存流BytesIO存储图片,无需保存到本地,直接插入Excel。

修改后的完整代码
import requests
from PIL import Image
import io
import xlsxwriter

# 请确保headers和cookies已正确定义
headers = {}
cookies = {}

def scrape_and_save(iterator):
    # 创建Excel工作簿
    workbook = xlsxwriter.Workbook('products_with_images.xlsx')
    worksheet = workbook.add_worksheet()
    
    # 设置表头
    headers_list = ['English Name', 'Original Name','Model Number', 'Model number(without dash)', 'Brand', 'Link', 'Product Image']
    for col, header in enumerate(headers_list):
        worksheet.write(0, col, header)
    
    # 设置图片列的宽度
    worksheet.set_column('G:G', width=15)
    
    # 行号计数器,从第2行开始(表头在第1行)
    row_num = 1
    
    for i in iterator:
        url = f'https://kream.co.kr/api/p/tabs/all/?cursor={i}&request_key=7844c102-1f44-4bc5-9d4f-9a5be38b04dd'
        r = requests.get(url, headers=headers, cookies=cookies)
        data_json = r.json()
        print(f'Page no.{i}')
        print(r.status_code)

        try:
            for item in data_json['items']:
                # 提取数据
                eng_name = item['product']['release']['name']
                orig_name = item['product']['release']['translated_name']
                model_num = item['product']['release']['style_code']
                model_num_w_dash = item['product']['release']['style_code'].replace('-', '')
                brand = item['product']['brand']['name']
                product_id = item['product']['release']['id']
                links = f'https://kream.co.kr/products/{product_id}' 
                
                # 写入数据到Excel
                worksheet.write(row_num, 0, eng_name)
                worksheet.write(row_num, 1, orig_name)
                worksheet.write(row_num, 2, model_num)
                worksheet.write(row_num, 3, model_num_w_dash)
                worksheet.write(row_num, 4, brand)
                worksheet.write(row_num, 5, links)
                
                # 下载图片到内存流,不保存本地文件
                img_url = item['product']['release']['image_urls'][0]
                img_response = requests.get(img_url, stream=True)
                img_bytes = io.BytesIO(img_response.content)
                
                # 插入图片到当前行的第7列(索引6)
                worksheet.insert_image(row_num, 6, img_url, {
                    'image_data': img_bytes,
                    'x_scale': 0.1,
                    'y_scale': 0.1,
                    'object_position': 1  # 图片随单元格移动
                })
                
                row_num += 1
        except Exception as e:
            print(f"处理第{i}页数据出错: {e}")
            continue  
    
    workbook.close()
    print("文件生成完成:products_with_images.xlsx")

# 调用示例,比如爬取前3页
scrape_and_save(iterator=[0, 1, 2])

关键修改点解析
  • 行号管理:用row_num逐行递增,确保每一行数据和图片对应正确,避免无效行号。
  • 内存流存储图片:用io.BytesIO直接存储图片字节流,无需生成本地PNG文件,减少文件冗余。
  • 统一Excel写入:把数据和图片都写入同一个Excel文件,实现内容整合。

内容的提问来源于stack exchange,提问作者Vitality Pelishenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 00:17:02