#!/usr/bin/env python # coding: utf-8 # In[20]: import re import json import csv from io import StringIO from bs4 import BeautifulSoup import requests # In[21]: url_stats = 'https://finance.yahoo.com/quote/{}/key-statistics?p={}' url_profile = 'https://finance.yahoo.com/quote/{}/profile?p={}' url_financials = 'https://finance.yahoo.com/quote/{}/financials?p={}' # In[46]: stock = 'GME' print("###################################################################################") print("Collicting info for {}".format(stock)) # In[23]: responce = requests.get(url_financials.format(stock, stock)) # In[24]: soup = BeautifulSoup(responce.text, 'html.parser') # In[25]: pattern = re.compile(r'\s--\sData\s--\s') script_data = soup.find('script', text=pattern).contents[0] # In[26]: start = script_data.find("context")-2 # In[27]: json_data = json.loads(script_data[start:-12]) # # Financial data # In[28]: annual_is = json_data['context']['dispatcher']['stores']['QuoteSummaryStore']['incomeStatementHistory']['incomeStatementHistory'] quarterly_is = json_data['context']['dispatcher']['stores']['QuoteSummaryStore']['incomeStatementHistoryQuarterly']['incomeStatementHistory'] annual_cf = json_data['context']['dispatcher']['stores']['QuoteSummaryStore']['cashflowStatementHistoryQuarterly']['cashflowStatements'] quarterly_cf = json_data['context']['dispatcher']['stores']['QuoteSummaryStore']['cashflowStatementHistory']['cashflowStatements'] annual_bs = json_data['context']['dispatcher']['stores']['QuoteSummaryStore']['balanceSheetHistory']['balanceSheetStatements'] quarterly_bs = json_data['context']['dispatcher']['stores']['QuoteSummaryStore']['balanceSheetHistoryQuarterly']['balanceSheetStatements'] # In[29]: annual_is_stats = [] quarterly_is_stats = [] annual_cf_stats = [] quarterly_cf_stats = [] annual_bs_stats =[] quarterly_bs_stats = [] for s in annual_is: statement = {} for key, val in s.items(): try: statement[key] = val['raw'] except TypeError: continue except KeyError: continue annual_is_stats.append(statement) for s in quarterly_is: statement = {} for key, val in s.items(): try: statement[key] = val['raw'] except TypeError: continue except KeyError: continue quarterly_is_stats.append(statement) for s in annual_cf: statement = {} for key, val in s.items(): try: statement[key] = val['raw'] except TypeError: continue except KeyError: continue annual_cf_stats.append(statement) for s in quarterly_cf: statement = {} for key, val in s.items(): try: statement[key] = val['raw'] except TypeError: continue except KeyError: continue quarterly_cf_stats.append(statement) for s in annual_bs: statement = {} for key, val in s.items(): try: statement[key] = val['raw'] except TypeError: continue except KeyError: continue annual_bs_stats.append(statement) for s in quarterly_bs: statement = {} for key, val in s.items(): try: statement[key] = val['raw'] except TypeError: continue except KeyError: continue quarterly_bs_stats.append(statement) # In[39]: print("###################################################################################") print("Showing annual income Statement History") print(annual_is_stats[0]) # In[40]: print("###################################################################################") print("Showing quarterly income Statement History") print(quarterly_is_stats[0]) # In[41]: print("###################################################################################") print("Showing annual cash flow Statements") print(annual_cf_stats[0]) # In[42]: print("###################################################################################") print("Showing quarterly cash flow Statements") print(quarterly_cf_stats[0]) # In[43]: print("###################################################################################") print("Showing annual balance Sheet Statements") print(annual_bs_stats[0]) # In[44]: print("###################################################################################") print("Showing quarterly balance Sheet Statements") print(quarterly_bs_stats[0]) # # Profile data # In[30]: responce = requests.get(url_profile.format(stock, stock)) soup = BeautifulSoup(responce.text, 'html.parser') pattern = re.compile(r'\s--\sData\s--\s') script_data = soup.find('script', text=pattern).contents[0] start = script_data.find("context")-2 json_data = json.loads(script_data[start:-12]) # In[31]: print("###################################################################################") print("Showing company Officers") print(json_data['context']['dispatcher']['stores']['QuoteSummaryStore']['assetProfile']['companyOfficers']) # In[32]: print("###################################################################################") print('Showing long Business Summary') print(json_data['context']['dispatcher']['stores']['QuoteSummaryStore']['assetProfile']['longBusinessSummary']) # In[33]: # Filtes for K8 and K10 sec filings filings =[] for f in json_data['context']['dispatcher']['stores']['QuoteSummaryStore']['secFilings']['filings']: if f['type'] == '8-K' or f['type'] == '10-K': filings.append(f) # In[34]: print("###################################################################################") print("Showing 8-K and 10-K SEC filings") print(filings) # # Statistics # In[35]: responce = requests.get(url_stats.format(stock, stock)) soup = BeautifulSoup(responce.text, 'html.parser') pattern = re.compile(r'\s--\sData\s--\s') script_data = soup.find('script', text=pattern).contents[0] start = script_data.find("context")-2 json_data = json.loads(script_data[start:-12]) # In[36]: print("###################################################################################") print("Showing Key Statistics") print(json_data['context']['dispatcher']['stores']['QuoteSummaryStore']['defaultKeyStatistics']) # In[18]: stock_url = 'https://query1.finance.yahoo.com/v7/finance/download/{}?' params = { 'range': '5y', 'interval': '1d', 'events': 'history', 'includeAdjustedClose': 'true' } responce = requests.get(stock_url.format(stock), params=params) # In[19]: print("###################################################################################") print("Showing history 5y 1d interval") file = StringIO(responce.text) reader = csv.reader(file) data = list(reader) for row in data[:5]: print(row) # In[ ]: