Как получить квартальные и конкретные даты финансовых данных Yahoo с помощью Python?

Я могу загрузить данные ежегодный из этого связь с помощью следующего кода, но это не то же самое, что показано на веб-сайте, потому что это данные за июнь:

Как получить квартальные и конкретные даты финансовых данных Yahoo с помощью Python?

Теперь у меня два вопроса:

  1. Как указать дату, чтобы годовые данные были такими же, как на следующем рисунке (сентябрь вместо июня, как показано красным прямоугольником)?
  2. Щелкая раз в квартал, как показано оранжевым прямоугольником, ссылка не изменится. Как получить квартальные данные?

Спасибо.

Как получить квартальные и конкретные даты финансовых данных Yahoo с помощью Python?

Пробовали ли вы искать вопросы/ответы, связанные со скрейпингом страниц, сгенерированных Javascript?

aris 09.04.2019 04:13

Откуда я знаю, что это javascript? Без понятия как это сделать...

saga 09.04.2019 04:16

Посмотрите несколько руководств по использованию селена и питона для очистки страниц.

aris 09.04.2019 04:51
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
3
3 158
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто любопытно, а зачем сначала писать html в файл, а потом читать его с пандами? Панды могут принимать html-запрос напрямую:

import pandas as pd

symbol = 'AAPL'
url = 'https://finance.yahoo.com/quote/%s/financials?p=%s' %(symbol, symbol)

dfs = pd.read_html(url)   
print(dfs[0])

Во-вторых, не уверен, почему у вас появляются ежегодные даты. Делая так, как у меня выше, показывает сентябрь.

print(dfs[0])
                                         0  ...                                  4
0                                  Revenue  ...                          9/26/2015
1                            Total Revenue  ...                          233715000
2                          Cost of Revenue  ...                          140089000
3                             Gross Profit  ...                           93626000
4                       Operating Expenses  ...                 Operating Expenses
5                     Research Development  ...                            8067000
6       Selling General and Administrative  ...                           14329000
7                            Non Recurring  ...                                  -
8                                   Others  ...                                  -
9                 Total Operating Expenses  ...                          162485000
10                Operating Income or Loss  ...                           71230000
11       Income from Continuing Operations  ...  Income from Continuing Operations
12         Total Other Income/Expenses Net  ...                            1285000
13      Earnings Before Interest and Taxes  ...                           71230000
14                        Interest Expense  ...                            -733000
15                       Income Before Tax  ...                           72515000
16                      Income Tax Expense  ...                           19121000
17                       Minority Interest  ...                                  -
18          Net Income From Continuing Ops  ...                           53394000
19                    Non-recurring Events  ...               Non-recurring Events
20                 Discontinued Operations  ...                                  -
21                     Extraordinary Items  ...                                  -
22            Effect Of Accounting Changes  ...                                  -
23                             Other Items  ...                                  -
24                              Net Income  ...                         Net Income
25                              Net Income  ...                           53394000
26   Preferred Stock And Other Adjustments  ...                                  -
27  Net Income Applicable To Common Shares  ...                           53394000

[28 rows x 5 columns]

Для второй части вы можете попытаться найти данные 1 из нескольких способов:

1) Проверьте запросы XHR и получите нужные данные, включив параметры в URL-адрес запроса, который генерирует эти данные и может возвращать вам в формате json (который, когда я искал, я не мог сразу найти, поэтому перешел к к следующему варианту)

2) Поиск по тегам <script>, так как формат json иногда может быть внутри этих тегов (которые я не очень тщательно искал, и думаю, что Selenium будет просто прямым способом, поскольку панды могут читать в таблицах)

3) Используйте селен, чтобы имитировать открытие браузера, получение таблицы и нажатие «Ежеквартально», а затем получение этой таблицы.

Я пошел с вариантом 3:

from selenium import webdriver
import pandas as pd

symbol = 'AAPL'
url = 'https://finance.yahoo.com/quote/%s/financials?p=%s' %(symbol, symbol)

driver = webdriver.Chrome('C:/chromedriver_win32/chromedriver.exe')
driver.get(url)

# Get Table shown in browser
dfs_annual = pd.read_html(driver.page_source)   
print(dfs_annual[0])

# Click "Quarterly"
driver.find_element_by_xpath("//span[text()='Quarterly']").click()

# Get Table shown in browser
dfs_quarter = pd.read_html(driver.page_source)   
print(dfs_quarter[0])

driver.close()

Используем ли мы find_element_by_xpath и //span[text() = 'любой' текст, который мы видим на веб-странице в других случаях?

saga 09.04.2019 14:58

да, если он находится в теге <span>. По сути, он говорит найти указанный тег с указанным текстом. Просто будьте осторожны, чтобы там не было нескольких таких элементов. Если это так, вам может потребоваться добавить что-то еще, например (найти ПЕРВЫЙ элемент, который соответствует критериям)

chitown88 09.04.2019 15:02

Другие вопросы по теме