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

Selenium Python下载单张及批量图片至指定目录的方法咨询

Selenium Python下载单张及批量图片至指定目录的方法咨询

嘿,这个需求我之前做过好几次,其实流程挺清晰的,我给你一步步拆解,附上代码示例,你可以直接参考调整:

一、前期准备

首先得确保你装了需要的库,没装的话先跑这两个命令:
pip install selenium
pip install requests
另外记得下载对应浏览器的驱动(比如ChromeDriver),要么配置到环境变量里,要么初始化浏览器时直接指定驱动路径。

二、核心步骤及代码示例

1. 先搞定保存目录

首先定义你要存图片的目录,比如./my_downloaded_images,然后判断这个目录是否存在,不存在就自动创建:

import os

# 指定保存图片的目录
save_directory = "./my_downloaded_images"
# 如果目录不存在则创建
if not os.path.exists(save_directory):
    os.makedirs(save_directory)

2. 用Selenium爬取并下载图片

接下来启动浏览器访问目标网页,获取所有图片元素,然后逐个下载到指定目录。这里要注意处理相对路径、请求异常这些小细节:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requests
from urllib.parse import urljoin

# 初始化Chrome浏览器(换成Firefox等也可以,对应改webdriver就行)
driver = webdriver.Chrome()
driver.get("替换成你的目标网页URL")

# 等待页面加载出图片元素(避免还没加载完就去获取,可选,根据网页情况调整等待时间)
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.TAG_NAME, "img")))

# 获取页面上所有img元素
all_images = driver.find_elements(By.TAG_NAME, "img")

# 遍历每个图片元素,下载保存
for index, img_element in enumerate(all_images):
    try:
        # 获取图片的src属性
        img_src = img_element.get_attribute("src")
        if not img_src:
            continue  # 跳过没有src的无效图片
        
        # 处理相对路径,转换成完整的绝对URL
        full_img_url = urljoin(driver.current_url, img_src)
        
        # 请求图片内容,加stream=True适合下载大文件
        response = requests.get(full_img_url, stream=True)
        response.raise_for_status()  # 如果请求失败直接抛出异常
        
        # 生成保存的文件名,这里用序号+原后缀,你也可以自定义命名规则
        img_extension = full_img_url.split('.')[-1].split('?')[0]  # 处理带参数的URL
        save_filename = f"pic_{index + 1}.{img_extension}"
        save_path = os.path.join(save_directory, save_filename)
        
        # 写入文件到指定目录
        with open(save_path, "wb") as file:
            for chunk in response.iter_content(chunk_size=8192):
                file.write(chunk)
        
        print(f"成功下载:{save_path}")
    except Exception as e:
        print(f"下载失败,错误原因:{str(e)}")

# 最后记得关闭浏览器
driver.quit()

三、实用补充技巧

  • 处理动态加载图片:如果网页是滚动才加载新图片的,你可以加一段滚动页面的逻辑,确保所有图片都加载出来:
# 示例:循环滚动页面加载所有图片
last_scroll_height = driver.execute_script("return document.body.scrollHeight")
while True:
    # 滚动到页面底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 等待新内容加载
    driver.implicitly_wait(3)
    # 对比新的滚动高度,判断是否加载完
    new_scroll_height = driver.execute_script("return document.body.scrollHeight")
    if new_scroll_height == last_scroll_height:
        break
    last_scroll_height = new_scroll_height
  • 规避反爬:有些网站会拦截非浏览器请求,你可以给requests加个模拟浏览器的请求头:
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}
response = requests.get(full_img_url, stream=True, headers=headers)
  • 避免文件名重复:如果担心文件名重复覆盖,你可以用UUID生成唯一文件名,或者对原URL做哈希处理。

备注:内容来源于stack exchange,提问作者Callum

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 12:08:14