如何用Python将图片存入CSV?现有实现问题求助
解决方案说明
CSV格式本身不支持直接嵌入图片,这是格式的设计限制。要实现「图片嵌入表格、内容整合到单个文件」的效果,推荐使用Excel(.xlsx)格式,它原生支持图片嵌入,且能把所有数据和图片打包到一个文件里。
针对你代码中的问题,逐一修复如下:
- 消除插入图片的警告:原代码用
i*idx计算行号,会出现0或负数(比如i=0、idx=0时),但Excel行号从1开始,改用连续的行号计数器即可解决。 - 解决空列与内容错位:统一数据写入和图片插入的行号,确保每一行数据对应正确的图片位置。
- 避免生成独立图片文件:用内存流
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
相关产品推荐
相关产品推荐

