返回

手把手教你用Python下载维基百科高清图片,尽享艺术盛宴

python

使用 Python 和 BeautifulSoup 下载维基百科图片的分辨率版本

引言

对于古斯塔夫·多雷艺术作品的爱好者来说,从维基百科的公共文件夹中收集所有雕刻作品的高清图片是一项令人兴奋的任务。本文将指导你编写一个 Python 脚本,利用 BeautifulSoup 库从指定文件夹中下载每张图片的分辨率版本。

创建 Python 脚本

  1. 导入必要的库import os, requests, bs4
  2. 定义目标 URL 和文件夹
    • url:维基百科公共文件夹的 URL
    • folder_name:用于保存图片的文件夹名称
  3. 创建文件夹os.makedirs(folder_name, exist_ok=True)
  4. 遍历页面上的图片 :使用 for 循环,遍历页面上的图片链接
  5. 下载图片
    • 获取图片页面 URL
    • 获取图片页面
    • 获取原始图片链接
    • 下载原始图片
    • 保存图片
  6. 完成 :打印完成信息

示例

使用以下脚本从维基百科上下载 "十字军东征" 雕刻作品的高清图片:

import os, requests, bs4

url = 'https://commons.wikimedia.org/wiki/Category:Crusades_by_Gustave_Dor%C3%A9'
folder_name = 'Crusades_by_Gustave_Dore'

os.makedirs(folder_name, exist_ok=True)

for n in range(10):
    res = requests.get(url)
    res.raise_for_status()
    soup = bs4.BeautifulSoup(res.text, 'html.parser')
    links = soup.select('a[href^="/wiki/File:"]')
    
    for link in links:
        image_page_url = 'https://commons.wikimedia.org' + link['href']
        image_page_res = requests.get(image_page_url)
        image_page_res.raise_for_status()

        image_url = image_page_res.url.replace('/wiki/', '/wikipedia/commons/') + '/latest'
        image_response = requests.get(image_url)
        image_response.raise_for_status()
        
        image_filename = os.path.basename(image_url)
        
        with open(os.path.join(folder_name, image_filename), 'wb') as f:
            f.write(image_response.content)

print('Done')

常见问题解答

  1. 如何调整脚本以下载不同文件夹中的图片?
    • 更改 url 变量的值为目标文件夹的 URL。
  2. 如何处理下载速度慢的问题?
    • 尝试增加 requests.get() 函数的 timeout 参数。
  3. 如何下载所有分辨率的图片,而不仅仅是最高分辨率?
    • 识别页面上不同的分辨率链接并相应地修改脚本。
  4. 如何使用 Selenium 自动化脚本?
    • 安装 Selenium 并将 from selenium import webdriver 添加到脚本中。
  5. 如何使用正则表达式提取图片名称?
    • 使用正则表达式库,例如 re, 来匹配 URL 中的文件名。

结论

通过使用 BeautifulSoup 库和 Python 脚本,你可以轻松地从维基百科公共文件夹中下载高分辨率图片。这个脚本可以自动化下载过程,节省大量时间和精力。享受古斯塔夫·多雷艺术作品的高清魅力吧!