使用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}")
关键逻辑说明
- 目录检查:先确保
scraped_images文件夹存在,避免因文件夹不存在导致的保存失败(虽然你说没报错,但这是必要的健壮性处理)。 - 提取文件详情页链接:分类页上的每个图片容器(
gallerybox)里的<a>标签指向的是该图片的文件详情页,我们需要先收集这些页面的URL。 - 从详情页提取高清图:在文件详情页中,带有
internal类的<a>标签的href就是高清图的直接下载链接。 - 筛选与下载:检查高清图URL是否以
Website.png结尾,符合条件的就下载保存。
额外提示
- 加入了打印语句,方便你实时查看下载进度。
- 使用
os.path.join处理文件路径,避免Windows和Linux系统的路径格式冲突。 - 使用
with open语句管理文件,确保文件正确关闭,避免资源泄漏。
内容的提问来源于stack exchange,提问作者livymio
相关产品推荐
相关产品推荐

