如何从网站下载数千个Excel文件?

-1 投票
1 回答
77 浏览
提问于 2025-04-14 16:08

这是我们要讨论的网站。

我想下载从2009年开始每一年的Excel文件。

我不想一个一个手动点击下载,有没有什么简单的方法?我对编程的经验不多,所以请保持简单。我知道Python可以用,但我没有Python的经验,VBA也许可以,但我在那方面也没有运气。

现在我只想把所有文件都下载下来,如果还有办法把这些文件合并在一起,那就更好了。老实说,我完全不会编程,但看起来这是完成这个任务的唯一方法,而学习一门完整的编程语言可能需要太长时间,我需要尽快下载这些文件。

如果这太复杂了,请告诉我是否应该咬咬牙,手动去做。

谢谢。

1 个回答

2

假设你已经有一个可以运行代码的环境(如果没有的话,请安装anaconda并使用jupyter notebook),这段代码就能解决问题:

第一次你需要安装一些库(只需运行一次):

%pip install bs4
%pip install requests

然后你就可以运行代码了:

import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin 


def download_excel_files(url, download_path):

    response = requests.get(url)
    

    if response.status_code == 200:

        soup = BeautifulSoup(response.content, 'html.parser')
        
        links = soup.find_all('a', href=True)
        
        for link in links:
            file_url = link['href']
            if file_url.endswith('.xls') or file_url.endswith('.xlsx'): 
                full_file_url = urljoin(url, file_url)
                file_name = os.path.join(download_path, os.path.basename(file_url))
                with open(file_name, 'wb') as f:
                    file_response = requests.get(full_file_url)
                    f.write(file_response.content)
                print(f"File '{file_name}' succesfully downloaded")
    else:
        print("Page error")

接下来,你可以循环年份并像这样调用函数:

base_url = 'https://clientportal.jse.co.za/downloadable-files?RequestNode=/Safex/agriculture.stats/'


for year in range(2009, 2025):
    url = base_url + str(year)
    download_folder = str(year)
    os.makedirs(download_folder, exist_ok=True)
    download_excel_files(url, download_folder)

因为我假设你只是为了这个目的在使用代码,所以我会避免解释每一个步骤。如果你需要更多的帮助,请随时问我。

撰写回答