Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import requests
- from bs4 import BeautifulSoup
- import csv
- website_url = requests.get('https://money.cnn.com/data/hotstocks').text
- soup = BeautifulSoup(website_url, 'lxml')
- tickers_mostactive_long = []
- tickers_mostactive = []
- names_mostactive_nonetype = []
- names_mostactive = []
- # initizaling lists for most active table
- my_table = soup.findAll('table')[0]
- html_tickers_mostactive = my_table.find_all('a')
- for i in html_tickers_mostactive:
- tickers_mostactive_long.append(i.get('href'))
- tickers_mostactive = [i.split('=',1)[1] for i in tickers_mostactive_long]
- html_names_mostactive = my_table.find_all('span')
- for i in html_names_mostactive:
- names_mostactive_nonetype.append(i.get('title'))
- for name in names_mostactive_nonetype:
- if name != None:
- names_mostactive.append(name)
- # will non-none type values will be appended to names_mostactive
- # end of most active
- tickers_gainers_long = []
- tickers_gainers = []
- names_gainers_nonetype = []
- names_gainers = []
- # initizaling lists for gainers table
- my_table = soup.find_all('table')[1]
- html_tickers_gainers = my_table.find_all('a')
- for i in html_tickers_gainers:
- tickers_gainers_long.append(i.get('href'))
- tickers_gainers = [i.split('=',1)[1] for i in tickers_gainers_long]
- html_names_gainers = my_table.find_all('span')
- for i in html_names_gainers:
- names_gainers_nonetype.append(i.get('title'))
- for name in names_gainers_nonetype:
- if name != None:
- names_gainers.append(name)
- # will non-none type values will be appended to names_gainers
- # end of gainers
- tickers_losers_long = []
- tickers_losers = []
- names_losers_nonetype = []
- names_losers = []
- # initizaling lists for losers table
- my_table = soup.findAll('table')[2]
- html_tickers_losers = my_table.find_all('a')
- for i in html_tickers_losers:
- tickers_losers_long.append(i.get('href'))
- tickers_losers = [i.split('=',1)[1] for i in tickers_losers_long]
- html_names_losers = my_table.find_all('span')
- for i in html_names_losers:
- names_losers_nonetype.append(i.get('title'))
- for name in names_losers_nonetype:
- if name != None:
- names_losers.append(name)
- # will non-none type values will be appended to names_losers
- # end of losers
- print('Most Active:')
- for ticker, name in zip(tickers_mostactive, names_mostactive):
- print(ticker,',',name)
- print('\n')
- print('Top Gainers:')
- for ticker, name in zip(tickers_gainers, names_gainers):
- print(ticker,',',name)
- print('\n')
- print('Top Losers:')
- for ticker, name in zip(tickers_losers, names_losers):
- print(ticker,',',name)
- print('\n')
- previousclose_mostactive = []
- openprice_mostactive = []
- volume_mostactive = []
- marketcap_mostactive = []
- url_pattern = 'https://finance.yahoo.com/quote/{}/'
- for ticker in tickers_mostactive:
- url = url_pattern.format(ticker)
- url_extract = requests.get(url).text
- soup = BeautifulSoup(url_extract, 'lxml')
- td_previousclose = soup.find_all('td')[1]
- td_openprice = soup.find_all('td') [3]
- td_volume = soup.find_all('td')[13]
- td_marketcap = soup.find_all('td')[17]
- # located previous close, open price, volume, and market cap
- # consistent for all stocks
- span_previousclose = str(td_previousclose.find_all('span'))
- span_openprice = str(td_openprice.find_all('span'))
- span_volume = str(td_volume.find_all('span'))
- span_marketcap = str(td_marketcap.find_all('span'))
- # used to trim down and to convert to string for manipulation
- split_previousclose = span_previousclose.split('">')[1]
- split_openprice = span_openprice.split('">')[1]
- split_volume = span_volume.split('">')[1]
- split_marketcap = span_marketcap.split('">')[1]
- # split to trim down even more
- previousclose = (split_previousclose.split('<')[0])
- openprice = (split_openprice.split('<')[0])
- volume = (split_volume.split('<')[0])
- marketcap = (split_marketcap.split('<')[0])
- # split to trim down even to just get attributes needed
- previousclose_mostactive.append(previousclose)
- openprice_mostactive.append(openprice)
- volume_mostactive.append(volume)
- marketcap_mostactive.append(marketcap)
- previousclose_gainers = []
- openprice_gainers = []
- volume_gainers = []
- marketcap_gainers = []
- for ticker in tickers_gainers:
- url = url_pattern.format(ticker)
- url_extract = requests.get(url).text
- soup = BeautifulSoup(url_extract, 'lxml')
- td_previousclose = soup.find_all('td')[1]
- td_openprice = soup.find_all('td') [3]
- td_volume = soup.find_all('td')[13]
- td_marketcap = soup.find_all('td')[17]
- # located previous close, open price, volume, and market cap
- # consistent for all stocks
- span_previousclose = str(td_previousclose.find_all('span'))
- span_openprice = str(td_openprice.find_all('span'))
- span_volume = str(td_volume.find_all('span'))
- span_marketcap = str(td_marketcap.find_all('span'))
- # used to trim down and to convert to string for manipulation
- split_previousclose = span_previousclose.split('">')[1]
- split_openprice = span_openprice.split('">')[1]
- split_volume = span_volume.split('">')[1]
- split_marketcap = span_marketcap.split('">')[1]
- # split to trim down even more
- previousclose = (split_previousclose.split('<')[0])
- openprice = (split_openprice.split('<')[0])
- volume = (split_volume.split('<')[0])
- marketcap = (split_marketcap.split('<')[0])
- # split to trim down even to just get attributes needed
- previousclose_gainers.append(previousclose)
- openprice_gainers.append(openprice)
- volume_gainers.append(volume)
- marketcap_gainers.append(marketcap)
- previousclose_losers = []
- openprice_losers = []
- volume_losers = []
- marketcap_losers = []
- for ticker in tickers_losers:
- url = url_pattern.format(ticker)
- url_extract = requests.get(url).text
- soup = BeautifulSoup(url_extract, 'lxml')
- td_previousclose = soup.find_all('td')[1]
- td_openprice = soup.find_all('td') [3]
- td_volume = soup.find_all('td')[13]
- td_marketcap = soup.find_all('td')[17]
- # located previous close, open price, volume, and market cap
- # consistent for all stocks
- span_previousclose = str(td_previousclose.find_all('span'))
- span_openprice = str(td_openprice.find_all('span'))
- span_volume = str(td_volume.find_all('span'))
- span_marketcap = str(td_marketcap.find_all('span'))
- # used to trim down and to convert to string for manipulation
- split_previousclose = span_previousclose.split('">')[1]
- split_openprice = span_openprice.split('">')[1]
- split_volume = span_volume.split('">')[1]
- split_marketcap = span_marketcap.split('">')[1]
- # split to trim down even more
- previousclose = (split_previousclose.split('<')[0])
- openprice = (split_openprice.split('<')[0])
- volume = (split_volume.split('<')[0])
- marketcap = (split_marketcap.split('<')[0])
- # split to trim down even to just get attributes needed
- previousclose_losers.append(previousclose)
- openprice_losers.append(openprice)
- volume_losers.append(volume)
- marketcap_losers.append(marketcap)
- column_headers = ['Ticker', 'Name', 'Previous Close', 'Open Price', 'Volume', 'Market Cap']
- break_mostactive = ['Most Active']
- break_gainers = ['Gainers']
- break_losers = ['Losers']
- rows_mostactive = zip(tickers_mostactive, names_mostactive, previousclose_mostactive, openprice_mostactive, volume_mostactive, marketcap_mostactive)
- rows_gainers = zip(tickers_gainers, names_gainers, previousclose_gainers, openprice_gainers, volume_gainers, marketcap_gainers)
- rows_losers = zip(tickers_losers, names_losers, previousclose_losers, openprice_losers, volume_losers, marketcap_losers)
- with open('stocks.csv', 'w') as f:
- writer = csv.writer(f)
- writer.writerow(column_headers)
- writer.writerow(break_mostactive)
- for row in rows_mostactive:
- writer.writerow(row)
- writer.writerow(break_gainers)
- for row in rows_gainers:
- writer.writerow(row)
- writer.writerow(break_losers)
- for row in rows_losers:
- writer.writerow(row)
- print('stocks.csv created')
- print('\n')
- stonks_file = 'stocks.csv'
- reader = csv.reader(open('stocks.csv'))
- stonks = {}
- for row in reader:
- key = row[0]
- if key in stonks:
- pass
- stonks[key] = row[1:]
- while True:
- stonk = input('Which stock do you want to know more about? Enter the stock ticker:').upper()
- if (stonk == 'ticker') or (stonk == 'most active') or (stonk == 'gainers') or (stonk == 'losers') or (stonk not in stonks):
- print('You did not enter a valid stock ticker!')
- break
- elif stonk in stonks:
- stonk_info = list(stonks[stonk])
- print('Ticker:', stonk)
- print('Name:', stonk_info[0])
- print('Previous Close:', stonk_info[1])
- print('Open Price:', stonk_info[2])
- print('Volume:', stonk_info[3])
- print('Market Cap:', stonk_info[4])
- restart = input('Do you want to look at another one? (yes/no)').lower()
- if (restart == 'yes'):
- continue
- elif (restart == 'no'):
- print('Goodbye!')
- break
- elif (restart != 'yes') or (restart != 'no'):
- print('You did not enter a valid answer!')
- break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement