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

如何用Python的requests库下载网站当前显示的随机生成图片

解决Requests下载图片与网页描述不匹配的问题

问题场景

我正在把Selenium Python代码改成用Requests库优化操作,目标网站逻辑很简单,但每次加载页面会随机生成对应描述的图片(比如显示“这是一只可爱的狗”时,配套展示狗狗图片)。图片的HTML标签示例如下:

<span class = "animals">
<img id = "img" src = "classes / image.php? s = 2 &amp; ts = 16669054016175" width = "350" height = "350">
</span>

之前用Selenium时,通过element.screenshot()能正常保存对应描述和图片,但换成Requests后,明明能从网页源码里拿到正确的“这是一只狗”描述,下载的却是猫咪图片。原Requests代码示例:

import requests

# login on website with headers.
#..search correct url to actual photo
#... save that url from source to url variable

url = "https://www.link.com/classes/image.php?s=2&ts=16669054016175"
with open ('name.png', 'wb') as f:
    f.write (requests.get (url) .content)

现在想实现:无需Selenium和截图方法,用Requests下载当前网页显示的对应描述和图片。

解决方案

可以实现,核心是维持会话一致性和动态获取图片参数,具体步骤如下:

1. 使用Requests会话保持上下文

Requests默认每次get/post都是独立请求,服务器无法关联你的会话状态,会返回新的随机图片。必须用requests.Session()来维持和浏览器一致的会话,确保服务器返回对应你当前页面的图片。

2. 动态提取最新的图片URL

图片URL里的ts参数是动态生成的(可能是时间戳或会话标识),静态复用旧参数会导致请求到新的随机图片。每次请求页面后,要从页面源码里提取最新的src属性,拼接成有效URL。

3. 同步请求顺序

先请求页面拿到描述和图片URL,再用同一个会话请求图片,避免间隔太久导致服务器生成新的会话实例。

修改后的代码示例

import requests
from bs4 import BeautifulSoup

# 初始化会话,维持登录状态和会话上下文
session = requests.Session()

# 执行登录逻辑(替换成你的实际登录代码)
# login_data = {"username": "your_user", "password": "your_pwd"}
# session.post("https://www.link.com/login", data=login_data, headers={"User-Agent": "Mozilla/5.0"})

# 请求目标页面,获取描述和图片URL
page_url = "https://www.link.com/your-target-page"
page_response = session.get(page_url, headers={"User-Agent": "Mozilla/5.0"})

# 解析页面,提取描述和图片src
soup = BeautifulSoup(page_response.text, "html.parser")
# 提取描述(根据实际页面结构调整选择器)
description = soup.find("xxx").text  # 替换成对应描述元素的选择器
# 提取图片src并处理无效空格
img_src = soup.find("img", id="img")["src"].replace(" ", "")
# 拼接完整图片URL(如果src是相对路径)
full_img_url = f"https://www.link.com{img_src}"

# 用同一个会话下载匹配的图片
img_response = session.get(full_img_url)
with open(f"{description.strip()}.png", "wb") as f:
    f.write(img_response.content)

关键说明

  • 会话session贯穿整个流程,确保服务器识别你的请求属于同一个会话,返回对应图片。
  • 必须动态提取ts参数,不能复用旧URL,因为每个页面实例的ts都是唯一绑定的。
  • 原图片src里的空格(比如classes / image.php)会导致URL无效,必须去掉。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:15:50