这是有问题的网站。
我想下载2009年以来每年的excel文件。
我不想手动单击所有这些,有什么帮助吗?编码经验不多,所以请保持简单。我知道 python 是一个选择,但我没有任何 python 经验,VBA 可以工作,但我在那里没有任何运气。
现在我想做的就是将它们全部下载,但如果还有一种方法来合并文件,那也会非常有帮助。老实说,我根本不会编码,但似乎这是完成此任务的唯一方法,并且可能需要很长时间才能学习整个编码语言,并且需要尽快下载这些文件。
如果这太复杂,请告诉我是否应该硬着头皮手动完成。
谢谢。
假设您已经有一个可以运行代码的环境(如果没有,请安装 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)
由于我假设您只是将代码用于此目的,因此我将避免解释每一段。如果您需要更多东西,请询问。