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

如何用Python抓取维基百科上的所有主权国家国旗图片?

用Python爬取维基百科主权国家国旗并下载

实现步骤与完整代码

你现有的代码已经定位到了包含图片的核心标签,接下来只需补充图片链接提取、原图地址转换及下载逻辑即可。以下是完整可运行的代码:

import requests
from bs4 import BeautifulSoup
import os

# 目标页面URL
url = "https://en.wikipedia.org/wiki/Gallery_of_sovereign_state_flags"
# 指定国旗保存文件夹
save_dir = "sovereign_state_flags"

# 创建保存文件夹(不存在则自动创建)
os.makedirs(save_dir, exist_ok=True)

# 请求目标页面
page = requests.get(url)
page.raise_for_status()  # 检查请求是否成功,失败则抛出异常

# 解析页面内容
soup = BeautifulSoup(page.content, 'html.parser')
flags = soup.find_all('a', attrs={'class': "image"})

# 遍历所有国旗图片标签
for idx, flag_a in enumerate(flags, 1):
    # 获取图片标签
    img_tag = flag_a.find('img')
    if not img_tag:
        continue
    
    # 提取缩略图链接并转换为原图链接
    thumb_src = img_tag.get('src')
    # 补全https协议头(部分链接以//开头)
    if thumb_src.startswith('//'):
        thumb_src = 'https:' + thumb_src
    # 替换缩略图路径为原图路径:移除/thumb/前缀和尺寸后缀部分
    original_src = thumb_src.replace('/thumb/', '/').split('/')[0] + '/' + '/'.join(thumb_src.split('/')[4:-1])
    
    # 提取图片文件名
    filename = original_src.split('/')[-1]
    save_path = os.path.join(save_dir, filename)
    
    try:
        # 流式下载图片,避免大文件占用过多内存
        img_response = requests.get(original_src, stream=True)
        img_response.raise_for_status()
        
        with open(save_path, 'wb') as f:
            for chunk in img_response.iter_content(chunk_size=8192):
                f.write(chunk)
        print(f"已下载第{idx}张:{filename}")
    except Exception as e:
        print(f"下载第{idx}张失败:{filename},错误信息:{str(e)}")

关键逻辑说明

  • 文件夹处理:通过os.makedirs自动创建目标文件夹,exist_ok=True参数避免重复创建时抛出异常。
  • 原图链接转换:维基百科页面默认显示缩略图,通过移除/thumb/路径段和尺寸后缀,可直接获取无压缩的原图链接。
  • 稳定下载:采用流式下载模式(stream=True)处理图片文件,同时加入异常捕获,避免单个图片下载失败导致整个程序中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:15:51