You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python requests库从指定网站读取Excel?求指导下载URL

解决方法

1. 分析页面触发逻辑

打开目标页面后右键选择「检查」,切换到Elements面板,定位下载按钮的HTML代码:

  • 若按钮是<a>标签但href为空或动态生成,查看绑定的JS事件;
  • 若存在隐藏表单,记录表单的action地址和所有input参数(比如基金ID、月份、CSRF令牌等)。

2. 构造请求直接下载

情况1:URL可通过页面参数拼接

先爬取页面中的关键参数,再构造下载链接:

import requests
from bs4 import BeautifulSoup

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
base_url = "https://www.motilaloswalmf.com/download/month-end-portfolio"

# 获取页面内容提取参数
resp = requests.get(base_url, headers=headers)
soup = BeautifulSoup(resp.text, "html.parser")

# 替换为页面实际的下载项选择器(比如带data属性的元素)
for item in soup.select(".portfolio-item"):
    fund_code = item.get("data-fund-code")
    month_year = item.get("data-month")
    # 构造下载URL(需根据实际API规则调整)
    download_url = f"https://www.motilaloswalmf.com/api/portfolio/download?fund={fund_code}&period={month_year}"
    
    # 下载并保存文件
    file_resp = requests.get(download_url, headers=headers)
    with open(f"motilal_{fund_code}_{month_year}.xlsx", "wb") as f:
        f.write(file_resp.content)

情况2:下载通过POST请求触发

若下载是表单提交触发,模拟POST请求:

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
post_url = "https://www.motilaloswalmf.com/download/process"  # 替换为表单action地址

# 从页面提取的参数(需根据实际表单字段调整)
form_data = {
    "fund_id": "123",
    "month": "May-2024",
    "csrf_token": "xxx"  # 从页面的meta标签或隐藏input中提取
}

resp = requests.post(post_url, headers=headers, data=form_data)
with open("portfolio.xlsx", "wb") as f:
    f.write(resp.content)

情况3:页面是JS渲染(动态加载内容)

若requests无法获取动态生成的下载参数,用Selenium模拟浏览器操作:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

# 配置Chrome浏览器下载路径(避免弹窗)
options = webdriver.ChromeOptions()
prefs = {"download.default_directory": "/your/download/path"}
options.add_experimental_option("prefs", prefs)

driver = webdriver.Chrome(options=options)
driver.get("https://www.motilaloswalmf.com/download/month-end-portfolio")

# 点击所有下载按钮(替换为实际按钮选择器)
for btn in driver.find_elements(By.CSS_SELECTOR, ".download-btn"):
    btn.click()
    time.sleep(2)  # 等待下载完成

driver.quit()

内容的提问来源于stack exchange,提问作者prepmath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:51:20