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

Python使用Requests爬取图片无报错但未生成保存文件问题

批量下载图片无文件生成问题修复

你的代码无报错但不生成文件,是几个常见的爬取细节没处理到位,逐个对应修改即可:

  • URL拼接错误:手动拼接图片地址时重复加了content/路径前缀。目标站点img标签的src属性本身已经带了该前缀,重复拼接后请求的是不存在的地址,服务器返回404错误页数据,不是有效图片。
  • 无校验逻辑:代码既没判断HTTP请求是否成功,也没检查DOM元素是否匹配到。如果目标页面元素ID变更、网络请求失败,代码会静默跳过,不会触发报错,看起来跑完全程其实根本没执行到写文件的步骤。
  • 文件路径不明确:VS Code运行Python脚本时默认工作目录是当前打开的工作区根目录,不是脚本存放的文件夹,就算文件写入成功,你也可能找错位置以为没生成。
  • UA版本过旧:你用的是十几年前的Edge12版本UA,部分站点会直接拦截这类异常请求,返回反爬页面。

修复后可直接运行的代码

import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin

# 替换为新版本浏览器UA,避免被拦截
HEADERS = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"}
# 固定保存路径为脚本所在文件夹,避免找不着文件
SAVE_PATH = os.path.dirname(os.path.abspath(__file__))

def get_page(link):
    resp = requests.get(url=link, headers=HEADERS, timeout=10)
    # 请求失败直接抛出异常,不会静默跑错
    resp.raise_for_status()
    return BeautifulSoup(resp.content, "lxml")

if __name__ == "__main__":
    target_url = "https://bisesargodha.edu.pk/content/ViewSeqImges.aspx?SubjectId=760&SeqNameAnsSubj=Sequence1"
    page_soup = get_page(target_url)
    img_table = page_soup.find('table', attrs={'id':'ContentPlaceHolder1_Table1'})
    if not img_table:
        raise RuntimeError("未找到目标图片容器,检查页面结构是否变更")
    
    img_list = img_table.find_all('img')
    print(f"共检测到{len(img_list)}张图片,开始下载")

    for index, img_tag in enumerate(img_list, start=1):
        # 自动拼接完整图片地址,不用手动处理路径前缀
        img_url = urljoin(target_url, img_tag['src'])
        img_resp = requests.get(img_url, headers=HEADERS, timeout=15)
        img_resp.raise_for_status()

        # 校验返回内容是否为图片,避免把错误页存成jpg
        if 'image' not in img_resp.headers.get('Content-Type', ''):
            print(f"第{index}张资源非图片,跳过,地址:{img_url}")
            continue
        
        img_save_full_path = os.path.join(SAVE_PATH, f"img-{index}.jpg")
        with open(img_save_full_path, "wb") as f:
            f.write(img_resp.content)
        print(f"已完成第{index}张图片下载,保存路径:{img_save_full_path}")

运行时控制台会打印每张图片的保存路径,直接按路径打开文件夹就能看到下载好的文件,不会出现找不到文件的问题。所有网络请求加了超时和状态校验,一旦请求失败会直接抛出明确错误,不会静默无响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:48:52