如何迭代Pandas DataFrame的url列并修改值实现图片下载替换
实现步骤
1. 安装依赖
先确保安装所需库:
pip install pandas requests
2. 核心代码实现
import pandas as pd import requests import os # 加载你的DataFrame(示例:从CSV读取) # df = pd.read_csv("your_data.csv") # 遍历每一行处理图片URL for idx, row in df.iterrows(): original_url = row["url"] # 生成文件名,默认从0开始编号;要从1开始的话改成 idx+1 new_filename = f"image_{idx}.jpg" try: # 流式下载图片,适配大文件 resp = requests.get(original_url, stream=True) resp.raise_for_status() # 捕获HTTP请求错误 # 写入图片到脚本所在目录 with open(new_filename, "wb") as img_file: for chunk in resp.iter_content(chunk_size=8192): img_file.write(chunk) # 替换DataFrame中的原URL为新文件名 df.loc[idx, "url"] = new_filename except Exception as e: # 处理下载失败的情况,可按需调整 print(f"处理URL {original_url} 失败: {str(e)}") # 可选:下载失败时标记为特定值,比如 df.loc[idx, "url"] = "download_failed" # 保存修改后的DataFrame(可选) # df.to_csv("updated_data.csv", index=False)
关键细节说明
- 文件名自定义:默认用DataFrame的索引命名,若需要起始编号为1,把
idx改成idx+1即可。 - 异常防护:避免单个URL下载失败导致整个脚本中断,同时打印错误信息方便排查问题。
- 大文件优化:用流式下载和分块写入,避免大图片占用过多内存。
- 防封禁建议:如果批量下载数量大,可导入
time库,在循环内添加time.sleep(1)降低请求频率,避免被目标网站限制。
内容的提问来源于stack exchange,提问作者mchd
相关产品推荐
相关产品推荐

