使用Python+BeautifulSoup遍历网页批量下载图片的代码调试求助
代码问题排查
- 原有代码是针对第三方图片站点MARCO编写的爬取逻辑,完全不适配Cryptopunks的资源规则:原逻辑依赖解析页面DOM提取
<a>标签、匹配特定路径规则、从img标签alt属性提取文件后缀,这些规则在Cryptopunks站点完全不生效。 - Cryptopunks的图片地址是固定规则的序列化URL,不需要爬取解析HTML页面,直接按照序号拼接地址即可,格式为
https://cryptopunks.app/cryptopunks/cryptopunk{4位补零序号}.png,序号范围为1~9999。 - 原代码缺少请求头伪装、超时控制、异常捕获、断点续传能力,批量下载10000个资源时极易被反爬拦截、因网络波动中断,且中断后无法续传,必须从头开始。
- 原代码用
os.system('mkdir')创建存储目录的方式跨平台兼容性差,在Windows等系统下容易出现路径创建失败的问题。
可行实现方案
首先安装依赖库,在终端执行命令:pip install requests tqdm
完整可运行代码如下:
import os import time import requests from tqdm import tqdm # 配置项 SAVE_DIR = "cryptopunks" START_ID = 1 END_ID = 10000 REQUEST_TIMEOUT = 10 # 伪装浏览器请求头,绕过基础反爬拦截 HEADERS = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Referer": "https://cryptopunks.app/" } RETRY_TIMES = 3 REQUEST_INTERVAL = 0.2 # 请求间隔,单位秒,可根据实际情况调整 def download_single_img(img_id: int) -> bool: # 拼接4位补零的文件名 file_name = f"cryptopunk{img_id:04d}.png" save_path = os.path.join(SAVE_DIR, file_name) # 已存在的文件直接跳过,支持断点续传 if os.path.exists(save_path): return True url = f"https://cryptopunks.app/cryptopunks/{file_name}" for _ in range(RETRY_TIMES): try: resp = requests.get(url, headers=HEADERS, timeout=REQUEST_TIMEOUT) resp.raise_for_status() with open(save_path, "wb") as f: f.write(resp.content) return True except Exception as e: time.sleep(1) continue # 重试全部失败后记录失败ID with open("download_failed.log", "a", encoding="utf-8") as f: f.write(f"{img_id}\n") return False if __name__ == "__main__": # 创建存储目录,兼容全平台 os.makedirs(SAVE_DIR, exist_ok=True) failed_count = 0 # 带进度条遍历下载 for punk_id in tqdm(range(START_ID, END_ID), desc="正在下载Cryptopunks图片"): if not download_single_img(punk_id): failed_count +=1 time.sleep(REQUEST_INTERVAL) print(f"下载完成,共失败{failed_count}个,失败ID已记录到download_failed.log文件,可后续单独补下")
使用注意事项
- 提前预留足够磁盘空间,10000张Cryptopunks原图总占用空间约300~500MB。
- 如果运行时出现大量请求失败,可适当调大
REQUEST_INTERVAL参数的值,降低请求频率,避免触发站点反爬规则。 - 脚本自动支持断点续传,中途终止后重新运行会自动跳过已下载的文件,无需重复下载。
- 所有下载完成的图片均为png格式,存放在脚本同级目录的
cryptopunks文件夹下,可直接读取用于GAN模型训练。
内容的提问来源于stack exchange,提问作者Sterik
相关产品推荐
相关产品推荐

