如何在 Windows 上使用 BeautifulSoup 创建 Python 脚本来下载 WIkimedia Commons 文件夹中每张图片的最高分辨率?

问题描述 投票:0回答:1

所以,我是古斯塔夫·多雷(Gustave Doré)的忠实粉丝,我想从组织整齐的维基共享资源文件夹中下载他的所有版画。

所以,给定一个维基共享资源文件夹,我需要以最高分辨率下载其中的所有图片

我开始写一些东西,但我不太好,所以它只是一个模板:

import os, requests, bs4

url = 'URL OF THE WIKIMEDIA COMMONS FOLDER'

os.makedirs('NAME OF THE FOLDER', exist_ok=True)
for n in range(NUMBER OF PICTURES IN THE PAGE - 1):
    print('I am downloading page number %s...' %(n+1))
    res = requests.get(url)
    res.raise_for_status()

    soup = bs4.BeautifulSoup(res.text, 'html.parser')

    #STUFF I STILL NEED TO ADD
    
print('Done')

例如,我会将其作为文件夹的 URL:

然后我想点击每个链接并进入图片页面,就像这样:

然后点击图片下方“原始文件”的链接下载“原始文件”。 除了有时图片没有更高的分辨率,就像在这种情况下:

  • https://commons.wikimedia.org/wiki/File:Andel_krizaci.jpg
只需点击图片下方的链接即可下载。

我完全陷入困境,提前感谢您的帮助!

如果图片保存时具有其页面中注明的名称,则可获得奖励积分

(例如在第二个链接中,图片应保存为“十字军对东方财富的惊讶.jpg”)

python web-scraping beautifulsoup wikimedia-commons
1个回答
0
投票
嘿 Gustave Doré 的忠实粉丝,这里有一个方法你可以做到

r = requests.get('https://commons.wikimedia.org/wiki/Category:Crusades_by_Gustave_Dor%C3%A9') soup = BeautifulSoup(r.text, 'html.parser') links = [i.find('img').get('src') for i in soup.find_all('a', class_='image')] links = ['/'.join(i.split('/')[:-1]).replace('/thumb', '') for i in links] for l in links: im = requests.get(l) with open(l.split('/')[-1], 'wb') as f: f.write(im.content)
    
© www.soinside.com 2019 - 2024. All rights reserved.