雅虎财经下载数据
Yahoo Finance Download Data
我正在尝试抓取 finance.yahoo.com 并下载数据文件。具体来说,这个url:https://finance.yahoo.com/quote/AAPL/history?p=AAPL
我想在这里完成两个目标:
- 我想将数据时间段参数设置为“最大”,我相信我需要使用 Selenium 和
- 想下载并保存嵌入在检查“下载数据”时出现的 href 中的数据文件。
到目前为止,我无法访问单击“Max”所需的下拉菜单,也无法找到下载文件所需的 href。
from selenium import webdriver
import time
from selenium.webdriver.chrome.options import Options
options = webdriver.ChromeOptions()
options.add_argument('--log-level=3')
stock = input()
base_url = 'https://finance.yahoo.com/quote/{}/history?p=
{}'.format(stock,stock)
driver = webdriver.Chrome()
driver.get(base_url)
driver.maximize_window()
driver.implicitly_wait(4)
driver.find_element_by_class_name("Fl(end) Mt(3px) Cur(p)").click()
time.sleep(4)
driver.quit()
您可以立即删除 #1 -- 直接查看页面,按要求传递参数。
基本 URI 是:https://finance.yahoo.com/quote/AAPL/history
可用参数为:period1
、period2
、interval
、filter
和 frequency
。
很简单,抓取现在作为纪元时间戳,并将其用作period2
参数,其中period1
可以简单地作为开始纪元0
。 interval
和 frequency
可以是任何你想要的;每日 1d
、每周 1wk
或每月 1mo
。最后,filter
应该是 history
。
完成的 URI:
https://finance.yahoo.com/quote/AAPL/history?period1=0&period2=1555905600&interval=1d&filter=history&frequency=1d
从那里,使用 Selenium 找到并单击 Download Data
link。
更新:
正如@QHarr 所说,Stack Overflow 上有很多问题详细说明了如何与雅虎财务合作。我还建议您试一试 searching。
以下显示了您可以使用的选择器。我没有添加任何等待条件作为唯一需要的条件,在我的测试运行中,我找不到;按下应用按钮后等待所有新数据出现。相反,我使用了硬编码的 time.sleep(5),如果可能的话,应该用更好的基于条件的等待来代替它。
from selenium import webdriver
# from selenium.webdriver.common.by import By
# from selenium.webdriver.support.ui import WebDriverWait
# from selenium.webdriver.support import expected_conditions as EC
import time
d = webdriver.Chrome()
d.get('https://finance.yahoo.com/quote/AAPL/history?p=AAPL')
try:
d.find_element_by_css_selector('[name=agree]').click() #oauth
except:
pass
d.find_element_by_css_selector('[data-icon=CoreArrowDown]').click() #dropdown
d.find_element_by_css_selector('[data-value=MAX]').click() #max
d.find_element_by_css_selector('button.Fl\(start\)').click() # done
d.find_element_by_css_selector('button.Fl\(end\) span').click() #apply
time.sleep(5)
d.find_element_by_css_selector('[download]').click() #download
我正在尝试抓取 finance.yahoo.com 并下载数据文件。具体来说,这个url:https://finance.yahoo.com/quote/AAPL/history?p=AAPL
我想在这里完成两个目标:
- 我想将数据时间段参数设置为“最大”,我相信我需要使用 Selenium 和
- 想下载并保存嵌入在检查“下载数据”时出现的 href 中的数据文件。
到目前为止,我无法访问单击“Max”所需的下拉菜单,也无法找到下载文件所需的 href。
from selenium import webdriver
import time
from selenium.webdriver.chrome.options import Options
options = webdriver.ChromeOptions()
options.add_argument('--log-level=3')
stock = input()
base_url = 'https://finance.yahoo.com/quote/{}/history?p=
{}'.format(stock,stock)
driver = webdriver.Chrome()
driver.get(base_url)
driver.maximize_window()
driver.implicitly_wait(4)
driver.find_element_by_class_name("Fl(end) Mt(3px) Cur(p)").click()
time.sleep(4)
driver.quit()
您可以立即删除 #1 -- 直接查看页面,按要求传递参数。
基本 URI 是:https://finance.yahoo.com/quote/AAPL/history
可用参数为:period1
、period2
、interval
、filter
和 frequency
。
很简单,抓取现在作为纪元时间戳,并将其用作period2
参数,其中period1
可以简单地作为开始纪元0
。 interval
和 frequency
可以是任何你想要的;每日 1d
、每周 1wk
或每月 1mo
。最后,filter
应该是 history
。
完成的 URI:
https://finance.yahoo.com/quote/AAPL/history?period1=0&period2=1555905600&interval=1d&filter=history&frequency=1d
从那里,使用 Selenium 找到并单击 Download Data
link。
更新:
正如@QHarr 所说,Stack Overflow 上有很多问题详细说明了如何与雅虎财务合作。我还建议您试一试 searching。
以下显示了您可以使用的选择器。我没有添加任何等待条件作为唯一需要的条件,在我的测试运行中,我找不到;按下应用按钮后等待所有新数据出现。相反,我使用了硬编码的 time.sleep(5),如果可能的话,应该用更好的基于条件的等待来代替它。
from selenium import webdriver
# from selenium.webdriver.common.by import By
# from selenium.webdriver.support.ui import WebDriverWait
# from selenium.webdriver.support import expected_conditions as EC
import time
d = webdriver.Chrome()
d.get('https://finance.yahoo.com/quote/AAPL/history?p=AAPL')
try:
d.find_element_by_css_selector('[name=agree]').click() #oauth
except:
pass
d.find_element_by_css_selector('[data-icon=CoreArrowDown]').click() #dropdown
d.find_element_by_css_selector('[data-value=MAX]').click() #max
d.find_element_by_css_selector('button.Fl\(start\)').click() # done
d.find_element_by_css_selector('button.Fl\(end\) span').click() #apply
time.sleep(5)
d.find_element_by_css_selector('[download]').click() #download