代码之家  ›  专栏  ›  技术社区  ›  prashanth manohar

使用Python从URL下载Excel文件

  •  1
  • prashanth manohar  · 技术社区  · 3 月前

    Excel文件的URL如下: https://www.gso.gov.vn/wp-content/uploads/2024/03/IIP-ENG.xlsx

    我有这个代码:

    from datetime import datetime, timedelta
    
    url = 'https://www.gso.gov.vn/wp-content/uploads/' + datetime.strftime(datetime.now() - timedelta(30), '%y') +'/' + datetime.strftime(datetime.now() - timedelta(30), '%m') + '/IIP-ENG.xlsx'
    
    import requests
    resp = requests.get(url, verify=False)
    output = open('IIP.xlsx', 'wb')
    output.write(resp.content)
    output.close()
    

    我可以看到正在下载的文件,但无法在Office Excel中打开它。文件已损坏。

    resp
    

    <响应[404]>

    我也无法使用此代码打开:

    import pandas as pd
    df = pd.read_excel(open('IIP.xlsx', 'rb'),sheet_name=0, engine='openpyxl')
    print(df.head(5)) 
    

    BadZipFile错误。该文件不是Zip文件。

    如何解决此问题?

    1 回复  |  直到 3 月前
        1
  •  1
  •   Guy    3 月前

    问题在于年份格式, '%y' 会给24,你需要 '%Y' 2024年

    datetime.strftime(datetime.now() - timedelta(30), '%Y')
    
        2
  •  1
  •   Chris Fu    3 月前

    固定的

    from datetime import datetime, timedelta
    
    url = 'https://www.gso.gov.vn/wp-content/uploads/' + datetime.strftime(datetime.now() - timedelta(30), '%Y/%m') + '/IIP-ENG.xlsx'
    
    import requests
    resp = requests.get(url, verify=False)
    if resp.status_code == 200:
        output = open('IIP.xlsx', 'wb')
        output.write(resp.content)
        output.close()
    else:
        print("File cannot be downloaded.")
    

    年和月部分应为“YYYY/mm”格式,模式为“%Y/%m”(无需两次格式化)。

    此外,在继续处理响应内容之前,请记住验证状态代码。

        3
  •  1
  •   Suramuthu R    3 月前

    你所提供的本身就是一个可下载的链接。去吧 browser > Settings > download 并选择要向下加载的位置。现在,只需从终端的/command prompr的python解释器中运行该脚本。

    from selenium import webdriver as dr
    url= "https://www.gso.gov.vn/wp-content/uploads/2024/03/IIP-ENG.xlsx"
    dr = dr.Chrome()
    dr.get(url)
    

    您将看到文件被下载到所需的目的地。