如何用python抓取雅虎财务数据的季度和具体日期?

如何用python抓取雅虎财务数据的季度和具体日期?,python,web-scraping,yahoo-finance,Python,Web Scraping,Yahoo Finance,我可以通过以下代码从这里下载年度数据,但它与网站上显示的数据不同,因为它是6月份的数据: 现在我有两个问题: 如何确定日期,使年度数据与下图相同(如红色矩形所示,是9月,而不是6月) 通过按季度单击(如橙色矩形所示),链接将不会更改。如何获取季度数据 谢谢 只是好奇,但为什么要先将html写入文件,然后用pandas读取?熊猫可以直接接收html请求: import pandas as pd symbol = 'AAPL' url = 'https://finance.yahoo.com/q

我可以通过以下代码从这里下载年度数据,但它与网站上显示的数据不同,因为它是6月份的数据:

现在我有两个问题:

  • 如何确定日期,使年度数据与下图相同(如红色矩形所示,是9月,而不是6月)
  • 通过按季度单击(如橙色矩形所示),链接将不会更改。如何获取季度数据
  • 谢谢


    只是好奇,但为什么要先将html写入文件,然后用pandas读取?熊猫可以直接接收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) 搜索
    标记,因为json格式有时可能在这些标记中(我没有仔细搜索,我认为Selenium只是一种直接的方法,因为pandas可以在表中读取)

    3) 使用selenium模拟打开浏览器,获取表格,然后单击“季度”,然后获取该表格

    我选择了选项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()
    

    您是否尝试过搜索与Javascript生成的页面有关的问题/答案?我如何知道这是Javascript?不知道该怎么做…查阅一些关于使用selenium和python刮页面的教程。我们是否使用通过xpath和//span[text()查找元素=“无论在其他情况下我们在网页上看到什么”文本?是的,只要它在标记
    中就可以了。本质上说,它是指找到指定的标记,该标记具有指定的文本。只是要注意,其中没有多个类似的元素。如果是这样,您可能需要添加一些额外的元素,例如(找到符合条件的第一个元素)