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

如何用Python从NHL官网下载Excel文件?

解决NHL.com Excel文件爬取下载问题

为什么BeautifulSoup找不到下载链接

该页面的下载按钮及对应链接是通过JavaScript动态渲染生成的,BeautifulSoup只能解析页面初始的静态HTML源码,无法获取JS加载后的动态内容,所以直接爬取不到下载链接。

两种可行的解决方案

方法一:直接构造API下载链接

  1. 打开浏览器开发者工具(F12),切换到Network标签,筛选XHR/Fetch类型请求
  2. 点击页面上的「Download Excel」按钮,观察新出现的请求,找到对应的API接口URL
  3. 这个URL会包含你当前页面的所有参数(dateFrom、dateTo、gameType等),并且带有格式参数(比如format=xlsx)
  4. 用Python的requests库直接请求该API并保存文件:
import requests

# 替换为你抓到的真实API下载链接
download_url = "https://api.nhle.com/stats/rest/en/team/summary?reportType=game&dateFrom=2022-10-23&dateTo=2022-10-23&gameType=2&filter=gamesPlayed,gte,1&sort=points,wins&page=0&pageSize=50&format=xlsx"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

response = requests.get(download_url, headers=headers)
with open("nhl_team_stats.xlsx", "wb") as f:
    f.write(response.content)

方法二:用Selenium模拟浏览器点击下载

如果API链接难以抓取或网站有反爬验证,可模拟真实浏览器操作:

  1. 安装Selenium库及对应浏览器驱动(比如ChromeDriver,需与浏览器版本匹配)
  2. 编写代码打开页面、点击下载按钮:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

# 设置下载路径,替换为你的本地文件夹路径
download_path = "/Users/xxx/Downloads"
options = webdriver.ChromeOptions()
prefs = {"download.default_directory": download_path}
options.add_experimental_option("prefs", prefs)

driver = webdriver.Chrome(options=options)
driver.get("https://www.nhl.com/stats/teams?reportType=game&dateFrom=2022-10-23&dateTo=2022-10-23&gameType=2&filter=gamesPlayed,gte,1&sort=points,wins&page=0&pageSize=50")

# 等待页面加载完成,找到下载按钮(选择器可根据页面实际结构调整)
time.sleep(3)
download_btn = driver.find_element(By.CSS_SELECTOR, "button[data-test='download-button']")
download_btn.click()

# 等待下载完成后关闭浏览器
time.sleep(5)
driver.quit()

注意事项

  • API链接可能随网站更新变化,需定期验证
  • 频繁请求可能触发反爬机制,建议添加合理的请求头、控制请求间隔
  • Selenium需保证浏览器驱动与浏览器版本完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:55:17