您可以使用 Selenium WebDriver 加载页面,WebElement 包含下载按钮和 click() 它,但与直接调用 API 相比,这将是一个缓慢而脆弱的解决方案。
我解决这个问题的方法是对 Yahoo Finance URL 进行逆向工程,并使用 Requests 库获取数据。结果是包含您正在查找的历史数据的 CSV。
如果您查看下载 URL...URL 查询参数相当直观易懂。
https://query1.finance.yahoo.com/v7/finance/download/ETH-USD?period1=1581795382&period2=1613417782&interval=1d&events=history&includeAdjustedClose=true
我们可以看到要修改的关键组件是股票代码、日期范围和间隔。在代码中...
import csv
from datetime import datetime, timedelta
from io import StringIO
import requests
ticker = 'ETH-USD'
url = f'https://query1.finance.yahoo.com/v7/finance/download/{ticker}'
now = datetime.now()
start_ts = int((now - timedelta(days=365)).timestamp())
end_ts = int(now.timestamp())
params = {
'period1': start_ts,
'period2': end_ts,
'interval': '1d',
'events': 'history',
'includeAdjustedClose': True,
}
result = requests.get(url, params=params)
f = StringIO(result.content.decode('utf-8'))
reader = csv.reader(f, delimiter=',')
for row in reader:
print('\t'.join(row))