首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取亚洲金融机构的产出

读取亚洲金融机构的产出
EN

Stack Overflow用户
提问于 2019-12-11 03:40:22
回答 2查看 1.1K关注 0票数 2

如何读取YahooFinancials1.5Ref的输出。[https://pypi.org/project/yahoofinancials/]

我是Python新手,需要帮助来解决以下返回的JSON数据输出:

代码语言:javascript
复制
from yahoofinancials import YahooFinancials  
yahoo_financials = YahooFinancials('AAPL')  
print(yahoo_financials.get_financial_stmts('annual', 'income'))**

前几行无序输出:

代码语言:javascript
复制
{'incomeStatementHistory': {'AAPL': [{'2019-09-28': {'researchDevelopment': 16217000000, 'effectOfAccountingCharges': None, 'incomeBeforeTax': 65737000000, 'minorityInterest': None, 'netIncome': 55256000000, 'sellingGeneralAdministrative': 18245000000, 'grossProfit': 98392000000, 'ebit': 63930000000, 'operatingIncome': 63930000000, 'otherOperatingExpenses': None, 'incomeBeforeTax': 65737000000, 'minorityInterest': None, 'netIncome': 55256000000, . . .  . .}  

我的输出是单引号,而不是预期的双引号,但包含所有4年,好的。

我可以通过以下方式来解决一年的问题:

代码语言:javascript
复制
data = yahoofinancials.getfinancial_stmts('annual', 'income')   
data['incomeStatementHistory']['DSV.CO'][0]  

在每一行中获取有序的输出键值:

代码语言:javascript
复制
{'2018-12-31': {'researchDevelopment': None'effectOfAccountingCharges': None,   
  'incomeBeforeTax': 5201000000,   
  'minorityInterest': -29000000,   
  'netIncome': 4000000000,   
  'sellingGeneralAdministrative': 11301000000,   
  'grossProfit': 17489000000,   
'ebit': 5426000000,   
'operatingIncome': 5426000000,   
'otherOperatingExpenses': None,   
'interestExpense': -355000000,   
'extraordinaryItems': None,   
'nonRecurring': None,   
'otherItems': None,   
'incomeTaxExpense': 1213000000,   
'totalRevenue': 79053000000,     
'totalOperatingExpenses': 73627000000,   
'costOfRevenue': 61564000000,   
'totalOtherIncomeExpenseNet': -225000000,   
'discontinuedOperations': None,   
'netIncomeFromContinuingOps': 3988000000,   
'netIncomeApplicableToCommonShares': 4000000000}}

在这里,我想加入一些单一的数据项,但是没有什么适合我的。请帮帮忙。

当我试图称呼‘ebit’时:

代码语言:javascript
复制
    data['incomeStatementHistory']['DSV.CO'][0]['ebit']

我得到以下错误:

代码语言:javascript
复制
---------------------------------------------------------------------------
KeyError                          Traceback (most recent call last)   
ipython-input-12-66fa46d51257> in module>   

-----> 1 data['incomeStatementHistory']['DSV.CO'][0]['ebit']

KeyError: 'ebit'

我也想拿到EBITDA,我从哪里弄到的?这是雅虎提供的。

我可以通过: get_total_revenue()和get_net_income()获得几个单一的数据项,但只能从去年获得。它是否可以作为一个参数,以年份和或quorter。

我正在使用Windows 10和Python3.7

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-11 17:18:00

当你进入@PaulLo删除的答案时-你不能直接得到ebit,因为有这样的日期

代码语言:javascript
复制
 data['incomeStatementHistory']['AAPL'][0]['2019-09-28']['ebit']
 data['incomeStatementHistory']['AAPL'][1]['2019-09-29']['ebit']
 data['incomeStatementHistory']['AAPL'][2]['2019-09-30']['ebit']

但是,您可以在.keys()中看到不同的日期

代码语言:javascript
复制
 print( data['incomeStatementHistory']['AAPL'][0].keys() ) # ['2019-09-28']
 print( data['incomeStatementHistory']['AAPL'][1].keys() ) # ['2019-09-29']
 print( data['incomeStatementHistory']['AAPL'][2].keys() ) # ['2019-09-30']

要解决此问题,可以使用.keys()中的日期,也可以使用.items().values()

代码语言:javascript
复制
from yahoofinancials import YahooFinancials  

yahoo_financials = YahooFinancials('AAPL')
data = yahoo_financials.get_financial_stmts('annual', 'income') 

#print( data['incomeStatementHistory']['AAPL'][0].keys() ) # ['2019-09-28']
#print( data['incomeStatementHistory']['AAPL'][1].keys() ) # ['2019-09-29']
#print( data['incomeStatementHistory']['AAPL'][2].keys() ) # ['2019-09-30']

for item in data['incomeStatementHistory']['AAPL']:
    for key, val in item.items():
        print(key, val['ebit'])

结果:

代码语言:javascript
复制
2019-09-28 63930000000
2018-09-29 70898000000
2017-09-30 61344000000
2016-09-24 60024000000
票数 1
EN

Stack Overflow用户

发布于 2020-03-08 20:00:55

这个怎么样?

代码语言:javascript
复制
from datetime import datetime
import lxml
from lxml import html
import requests
import numpy as np
import pandas as pd

symbol = 'AAPL'

url = 'https://finance.yahoo.com/quote/' + symbol + '/financials?p=' + symbol

# Set up the request headers that we're going to use, to simulate
# a request by the Chrome browser. Simulating a request from a browser
# is generally good practice when building a scraper
headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'en-US,en;q=0.9',
    'Cache-Control': 'max-age=0',
    'Pragma': 'no-cache',
    'Referrer': 'https://google.com',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'
}

# Fetch the page that we're going to parse, using the request headers
# defined above
page = requests.get(url, headers)

# Parse the page with LXML, so that we can start doing some XPATH queries
# to extract the data that we want
tree = html.fromstring(page.content)

# Smoke test that we fetched the page by fetching and displaying the H1 element
tree.xpath("//h1/text()")

table_rows = tree.xpath("//div[contains(@class, 'D(tbr)')]")

# Ensure that some table rows are found; if none are found, then it's possible
# that Yahoo Finance has changed their page layout, or have detected
# that you're scraping the page.
assert len(table_rows) > 0

parsed_rows = []

for table_row in table_rows:
    parsed_row = []
    el = table_row.xpath("./div")

    none_count = 0

    for rs in el:
        try:
            (text,) = rs.xpath('.//span/text()[1]')
            parsed_row.append(text)
        except ValueError:
            parsed_row.append(np.NaN)
            none_count += 1

    if (none_count < 4):
        parsed_rows.append(parsed_row)

df = pd.DataFrame(parsed_rows)
df

结果:

代码语言:javascript
复制
                                              0  ...            5
0                                     Breakdown  ...    9/29/2016
1                                 Total Revenue  ...  215,639,000
2                               Cost of Revenue  ...  131,376,000
3                                  Gross Profit  ...   84,263,000
4                          Research Development  ...   10,045,000
5            Selling General and Administrative  ...   14,194,000
6                      Total Operating Expenses  ...   24,239,000
7                      Operating Income or Loss  ...   60,024,000
8                              Interest Expense  ...    1,456,000
9               Total Other Income/Expenses Net  ...   -1,195,000
10                            Income Before Tax  ...   61,372,000
11                           Income Tax Expense  ...   15,685,000
12            Income from Continuing Operations  ...   45,687,000
13                                   Net Income  ...   45,687,000
14  Net Income available to common shareholders  ...   45,687,000
15                                       EBITDA  ...   73,333,000
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59278589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档