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

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

这是有问题的网站。

我想下载2009年以来每年的excel文件。

我不想手动单击所有这些,有什么帮助吗?编码经验不多,所以请保持简单。我知道 python 是一个选择,但我没有任何 python 经验,VBA 可以工作,但我在那里没有任何运气。

现在我想做的就是将它们全部下载,但如果还有一种方法来合并文件,那也会非常有帮助。老实说,我根本不会编码,但似乎这是完成此任务的唯一方法,并且可能需要很长时间才能学习整个编码语言,并且需要尽快下载这些文件。

如果这太复杂,请告诉我是否应该硬着头皮手动完成。

谢谢。

python excel automation download consolidation
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)

由于我假设您只是将代码用于此目的,因此我将避免解释每一段。如果您需要更多东西,请询问。

© www.soinside.com 2019 - 2024. All rights reserved.