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

如何提取并存储requests请求获取的网页中的图片资源

实现方案

你当前的代码仅完成了随机生成prnt.sc链接、请求页面HTML的步骤,还需要补充HTML解析、图片提取、本地存储的逻辑,具体实现如下:

前置依赖安装

需要先安装HTML解析库:

pip install beautifulsoup4 lxml

完整可运行代码

import requests
import string
import random
from bs4 import BeautifulSoup
import os

# 创建存储图片的文件夹
if not os.path.exists("prnt_sc_imgs"):
    os.mkdir("prnt_sc_imgs")

# 必须添加请求头,否则会被prnt.sc反爬拦截
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"
}

def id_generator(size=6, chars=string.ascii_lowercase + string.digits):
    return ''.join(random.choice(chars) for _ in range(size))

for i in range(50):
    link_id = id_generator()
    page_url = f"https://prnt.sc/{link_id}"
    print(f"正在处理:{page_url}")
    
    try:
        # 请求页面HTML
        page_resp = requests.get(page_url, headers=HEADERS, timeout=10)
        page_resp.raise_for_status() # 状态码异常直接抛出错误跳过
        
        # 解析HTML提取图片链接
        soup = BeautifulSoup(page_resp.text, "lxml")
        img_tag = soup.find("img", id="screenshot-image")
        if not img_tag or not img_tag.get("src"):
            print(f"未找到有效图片,跳过:{page_url}")
            continue
        
        img_url = img_tag["src"]
        # 处理协议缺失的情况
        if img_url.startswith("//"):
            img_url = f"https:{img_url}"
        
        # 请求图片资源
        img_resp = requests.get(img_url, headers=HEADERS, timeout=10)
        img_resp.raise_for_status()
        
        # 保存到本地,用随机id做文件名,保留原后缀
        img_suffix = img_url.split(".")[-1].split("?")[0].lower()
        if img_suffix not in ["jpg", "jpeg", "png", "gif", "webp"]:
            img_suffix = "png" # 无有效后缀默认存为png
        save_path = f"prnt_sc_imgs/{link_id}.{img_suffix}"
        
        with open(save_path, "wb") as f:
            f.write(img_resp.content)
        print(f"图片保存成功:{save_path}")
    
    except Exception as e:
        print(f"处理失败:{page_url},错误信息:{str(e)}")
        continue

关键逻辑说明

  • 反爬处理:prnt.sc对无User-Agent的请求会直接拦截,所以所有请求都必须携带浏览器标识的请求头
  • 图片提取:prnt.sc的页面结构中,实际截图固定存放在id为screenshot-image的img标签的src属性中,不需要复杂的规则匹配
  • 异常处理:随机生成的id大概率对应无效页面,加上网络波动的影响,添加异常捕获可以避免程序中途崩溃
  • 路径处理:自动创建存储文件夹,避免本地路径不存在导致的写入错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:06:00