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

如何用通配符下载域名下非指定URL图片?含807只宝可梦图片批量需求

嘿,很高兴能帮你解决这两个问题!咱们一步步来拆解:

关于通配符批量下载域名下图片的可行性

简单来说:如果目标图片的URL有清晰可遵循的规律(比如固定前缀+递增编号+固定后缀),通配符配合命令行工具(如wget、curl)确实能实现批量下载;但如果URL完全无规律(比如Bulbapedia图片里的随机存储路径),通配符就派不上用场了,这时候需要用爬虫先抓取页面中的图片链接,再批量下载。

举个通配符能用的例子:如果图片URL是https://example.com/pics/animal{001..100}.png,你可以直接在终端运行:

wget https://example.com/pics/animal{001..100}.png

就能一次性下载100张图片。

批量下载Bulbapedia上807只宝可梦展示图片的具体方法

你观察到的URL规律很关键,但要注意:/upload/xx/xx/这部分是图片的随机存储路径,没办法直接通过编号+名字拼接出来,所以需要用爬虫先获取每个宝可梦页面的正确图片链接,再批量下载。下面给你两种实用方案:

方案1:Python爬虫(灵活可控,推荐)

用requests+BeautifulSoup可以轻松实现,步骤是:先抓取宝可梦的英文名列表,再遍历每个宝可梦页面获取图片URL,最后下载保存。

import requests
from bs4 import BeautifulSoup
import os

# 创建图片保存目录
save_folder = "pokemon_images"
if not os.path.exists(save_folder):
    os.makedirs(save_folder)

# 第一步:从宝可梦编号列表页抓取807只宝可梦的英文名
list_page_url = "https://bulbapedia.bulbagarden.net/wiki/List_of_Pokémon_by_National_Pokédex_number"
list_response = requests.get(list_page_url)
list_soup = BeautifulSoup(list_response.text, "html.parser")

# 提取表格中的英文名(跳过表头,取前807行)
pokemon_name_list = []
table_rows = list_soup.select("table.roundy tr")[1:808]
for row in table_rows:
    name_link = row.select_one("td:nth-child(2) a")
    if name_link:
        pokemon_name_list.append(name_link.text)

# 第二步:遍历每个宝可梦页面,下载展示图片
for idx, pokemon_name in enumerate(pokemon_name_list):
    dex_num = idx + 1
    dex_num_str = f"{dex_num:03d}"
    pokemon_page_url = f"https://bulbapedia.bulbagarden.net/wiki/{pokemon_name}_Pokémon)"
    
    try:
        # 获取页面内容
        page_response = requests.get(pokemon_page_url)
        page_response.raise_for_status()
        page_soup = BeautifulSoup(page_response.text, "html.parser")
        
        # 找到信息框里的展示图片
        display_img = page_soup.select_one(".infobox img")
        if display_img and "src" in display_img.attrs:
            img_url = display_img["src"]
            # 补全相对路径为完整URL
            if not img_url.startswith("http"):
                img_url = f"https:{img_url}"
            
            # 下载并保存图片
            img_response = requests.get(img_url)
            img_response.raise_for_status()
            save_path = os.path.join(save_folder, f"{dex_num_str}{pokemon_name}.png")
            with open(save_path, "wb") as img_file:
                img_file.write(img_response.content)
            
            print(f"✅ 已下载:{save_path}")
        else:
            print(f"⚠️ 未找到{dex_num_str}{pokemon_name}的展示图片")
    
    except Exception as e:
        print(f"❌ 下载{dex_num_str}{pokemon_name}时出错:{str(e)}")

方案2:命令行工具(适合不想写代码的情况)

如果你不想写Python脚本,可以用wget配合一些网页抓取工具(比如lynx)来提取图片链接,再批量下载。比如:

  1. 先抓取宝可梦列表页的所有页面链接:
lynx -dump "https://bulbapedia.bulbagarden.net/wiki/List_of_Pokémon_by_National_Pokédex_number" | grep "(Pokémon)" | cut -d " " -f 2 > pokemon_links.txt
  1. 遍历每个链接,提取图片URL并下载:
while read link; do
    img_url=$(lynx -dump "$link" | grep "cdn.bulbagarden.net/upload" | head -1)
    if [ ! -z "$img_url" ]; then
        wget -P pokemon_images "$img_url"
    fi
done < pokemon_links.txt

不过这种方法稳定性稍差,遇到页面结构变化可能会失效,不如Python方案灵活。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:20:11