Yahoo Finance Загрузить данные - PullRequest
       36

Yahoo Finance Загрузить данные

0 голосов
/ 23 апреля 2019

Я пытаюсь очистить finance.yahoo.com и загрузить файл данных.В частности, этот URL: https://finance.yahoo.com/quote/AAPL/history?p=AAPL

Здесь я хотел бы выполнить две задачи: 1) Я хотел бы установить для параметров периода времени данных значение «Макс», которое, как мне кажется, мне понадобитсяиспользуйте Selenium и 2) хотели бы загрузить и сохранить файл данных, который встроен в раздел 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()

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Ниже показаны селекторы, которые вы можете использовать. Я не добавил ни одного условия ожидания, так как это было необходимо, в моих тестовых прогонах я не мог найти; ожидание появления всех новых данных после нажатия кнопки «Применить». Вместо этого я использую жестко закодированный 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
0 голосов
/ 23 апреля 2019

Вы можете сразу убрать # 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.

Я также проголосовал против вас, потому что вы явно не приложили никаких усилий, чтобы понять это для себя.

UPDATE:

Как сказал @QHarr, существует множество вопросов по поводу переполнения стека, в которых подробно описывается, как работать с финансами Yahoo. Я также рекомендую вам поиск водоворот.

...