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

使用BeautifulSoup爬取图片时按名称筛选高分辨率图片无下载结果的问题排查

问题分析与解决方案

你遇到的核心问题是:页面上的<img>标签加载的都是低分辨率缩略图,这些缩略图的URL根本不会以Website.png结尾,所以你的筛选条件完全匹配不到任何资源,自然没有图片被下载。

目标网站的高清图(带Website.png后缀的)并没有直接出现在分类页的<img>标签里,而是需要从每个图片对应的文件详情页中提取。下面是修正后的完整代码,以及详细的逻辑说明:

修正后的代码

from bs4 import BeautifulSoup
import requests
import os

# 确保图片保存目录存在,避免报错
save_directory = 'scraped_images'
if not os.path.exists(save_directory):
    os.makedirs(save_directory)

# 目标分类页URL
base_url = "https://www.ssbwiki.com/Category:Head_icons_(SSBU)"
request_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"}

# 第一步:获取分类页的所有图片文件页面链接
category_page = requests.get(base_url, headers=request_headers)
category_soup = BeautifulSoup(category_page.text, 'html.parser')

# 定位每个图片的容器,提取对应的文件详情页链接
gallery_boxes = category_soup.find_all('div', class_='gallerybox')
file_page_urls = []
for box in gallery_boxes:
    image_link = box.find('a')
    if image_link and 'href' in image_link.attrs:
        # 拼接完整的文件页面URL
        full_file_url = requests.compat.urljoin(base_url, image_link['href'])
        file_page_urls.append(full_file_url)

# 第二步:遍历每个文件页面,提取高清图URL并下载
for page_url in file_page_urls:
    file_page = requests.get(page_url, headers=request_headers)
    file_soup = BeautifulSoup(file_page.text, 'html.parser')
    
    # 找到高清图的直接下载链接
    high_res_link = file_soup.find('a', class_='internal', href=True)
    if not high_res_link:
        continue
    
    # 拼接完整的高清图URL
    high_res_img_url = requests.compat.urljoin(base_url, high_res_link['href'])
    
    # 筛选只下载带Website.png后缀的高清图
    if high_res_img_url.endswith("Website.png"):
        img_filename = high_res_img_url.split('/')[-1]
        img_save_path = os.path.join(save_directory, img_filename)
        
        # 下载并保存图片
        img_response = requests.get(high_res_img_url, headers=request_headers)
        with open(img_save_path, 'wb') as img_file:
            img_file.write(img_response.content)
        print(f"成功下载:{img_filename}")

关键逻辑说明

  1. 目录检查:先确保scraped_images文件夹存在,避免因文件夹不存在导致的保存失败(虽然你说没报错,但这是必要的健壮性处理)。
  2. 提取文件详情页链接:分类页上的每个图片容器(gallerybox)里的<a>标签指向的是该图片的文件详情页,我们需要先收集这些页面的URL。
  3. 从详情页提取高清图:在文件详情页中,带有internal类的<a>标签的href就是高清图的直接下载链接。
  4. 筛选与下载:检查高清图URL是否以Website.png结尾,符合条件的就下载保存。

额外提示

  • 加入了打印语句,方便你实时查看下载进度。
  • 使用os.path.join处理文件路径,避免Windows和Linux系统的路径格式冲突。
  • 使用with open语句管理文件,确保文件正确关闭,避免资源泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:49:10