如何用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
相关产品推荐
相关产品推荐

