我正在做一个需要财务数据的项目,我需要从雅虎财经中抓取历史数据,但是例如在该页面中的https://finance.yahoo.com/quote/ETH-USD/history?p=ETH-USD,我需要调整时间间隔并按下下载按钮,我该怎么做用蟒蛇做吗?我应该自动完成这项任务。
抱歉我的语法错误,我的母语不是英语。
答案 0 :(得分:1)
为了让你从雅虎财经中提取数据,你可以使用一个名为yfinance的python库
在您的情况下,通过使用此库,您将执行以下操作:
import yfinance as yf
tickers = yf.Tickers('ETH')
eth_history = tickers.tickers.ETH.history(period="1y")
然后你可以对这些数据做任何你想做的事情(例如保存在电子表格中)。
答案 1 :(得分:0)
您可以使用实现 Chrome DevTools 协议 (CDP) 的库来自动化 Chrome 浏览器或无头 Chromium 浏览器(或任何支持此协议的浏览器)。
这是我通过搜索找到的一个库:https://github.com/hyperiongray/trio-chrome-devtools-protocol,但我确定还有其他库。我个人没有使用过。
答案 2 :(得分:0)
您可以使用 Selenium WebDriver 加载页面,WebElement 包含下载按钮和 click() 它,但与直接调用 API 相比,这将是一个缓慢而脆弱的解决方案。
我解决这个问题的方法是对雅虎财经 URL 进行逆向工程,并使用请求库获取数据。结果是包含您要查找的历史数据的 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))