使用Python Scrapy无法爬取点击Download Data按钮后的Excel文件下载响应
问题解答
关于::before标记的说明
::before是CSS伪元素,仅用于在对应DOM节点前插入装饰性的内容(比如图标、前缀文字),和按钮的点击触发逻辑、下载地址没有关联,不需要关注该标记。
可行解决方案
方案1:使用浏览器自动化工具(推荐,开发成本低)
这类工具可以模拟真实用户点击操作,直接触发下载逻辑,不需要手动解析下载接口:
- 推荐使用
Playwright或Selenium,启动浏览器访问目标页面后,定位到「Download Data」按钮执行点击操作即可,文件会自动下载到你指定的路径。 - 示例代码片段(Python + Playwright):
from playwright.sync_api import sync_playwright import os # 指定下载存储路径 download_path = "./your_save_path" os.makedirs(download_path, exist_ok=True) with sync_playwright() as p: # 调试阶段可以将headless设为False查看操作过程 browser = p.chromium.launch(headless=True) context = browser.new_context(accept_downloads=True) page = context.new_page() # 访问目标页面 page.goto("https://www.moneycontrol.com/mutual-funds/find-fund/returns?&amc=AXMF&EXCLUDE_FIXED_MATURITY_PLANS=Y") # 等待按钮加载完成后点击,同时捕获下载任务 with page.expect_download() as download_info: page.get_by_text("Download Data").click() download = download_info.value # 保存文件到指定路径 download.save_as(os.path.join(download_path, download.suggested_filename)) browser.close()
方案2:逆向接口获取下载地址(性能更高,适合批量场景)
如果需要高频批量下载,可以通过抓包解析下载请求构造调用:
- 打开浏览器F12开发者工具,切换到「网络」标签,过滤XHR/fetch请求
- 点击页面的「Download Data」按钮,查看触发的新请求,一般为POST类型,请求参数会包含当前页面的筛选条件
- 复制该请求的URL、请求头、请求参数,用
requests库构造相同的请求即可拿到Excel文件的字节流,直接保存到本地。需要注意部分动态参数(如csrf token、会话ID)需要先从页面源码或者Cookie中提取后再构造请求。
注意事项
- 不要高频发起请求,避免触发站点反爬机制被封禁IP
- 下载的数据仅可用于合法合规的个人用途,遵守站点的robots协议和用户协议
内容的提问来源于stack exchange,提问作者Peace
相关产品推荐
相关产品推荐

