Advertisement
tonypromos20

Python Project

Nov 17th, 2019
439
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.35 KB | None | 0 0
  1. import requests
  2. from bs4 import BeautifulSoup
  3. import csv
  4.  
  5. website_url = requests.get('https://money.cnn.com/data/hotstocks').text
  6. soup = BeautifulSoup(website_url, 'lxml')
  7.  
  8. tickers_mostactive_long = []
  9. tickers_mostactive = []
  10. names_mostactive_nonetype = []
  11. names_mostactive = []
  12. # initizaling lists for most active table
  13.  
  14. my_table = soup.findAll('table')[0]
  15.  
  16. html_tickers_mostactive = my_table.find_all('a')
  17.  
  18. for i in html_tickers_mostactive:
  19.      tickers_mostactive_long.append(i.get('href'))
  20.  
  21. tickers_mostactive = [i.split('=',1)[1] for i in tickers_mostactive_long]
  22.  
  23. html_names_mostactive = my_table.find_all('span')
  24.  
  25. for i in html_names_mostactive:
  26.      names_mostactive_nonetype.append(i.get('title'))
  27.  
  28. for name in names_mostactive_nonetype:
  29.     if name != None:
  30.         names_mostactive.append(name)
  31. # will non-none type values will be appended to names_mostactive
  32. # end of most active
  33.  
  34. tickers_gainers_long = []
  35. tickers_gainers = []
  36. names_gainers_nonetype = []
  37. names_gainers = []
  38. # initizaling lists for gainers table
  39.  
  40. my_table = soup.find_all('table')[1]
  41.  
  42. html_tickers_gainers = my_table.find_all('a')
  43.  
  44. for i in html_tickers_gainers:
  45.      tickers_gainers_long.append(i.get('href'))
  46.  
  47. tickers_gainers = [i.split('=',1)[1] for i in tickers_gainers_long]
  48.  
  49.  
  50. html_names_gainers = my_table.find_all('span')
  51.  
  52. for i in html_names_gainers:
  53.      names_gainers_nonetype.append(i.get('title'))
  54.  
  55. for name in names_gainers_nonetype:
  56.     if name != None:
  57.         names_gainers.append(name)
  58. # will non-none type values will be appended to names_gainers
  59. # end of gainers
  60.  
  61. tickers_losers_long = []
  62. tickers_losers = []
  63. names_losers_nonetype = []
  64. names_losers = []
  65. # initizaling lists for losers table
  66.  
  67. my_table = soup.findAll('table')[2]
  68.  
  69. html_tickers_losers = my_table.find_all('a')
  70.  
  71. for i in html_tickers_losers:
  72.      tickers_losers_long.append(i.get('href'))
  73.  
  74. tickers_losers = [i.split('=',1)[1] for i in tickers_losers_long]
  75.  
  76. html_names_losers = my_table.find_all('span')
  77.  
  78. for i in html_names_losers:
  79.      names_losers_nonetype.append(i.get('title'))
  80.  
  81. for name in names_losers_nonetype:
  82.     if name != None:
  83.         names_losers.append(name)
  84. # will non-none type values will be appended to names_losers
  85. # end of losers
  86.  
  87. print('Most Active:')
  88. for ticker, name in zip(tickers_mostactive, names_mostactive):
  89.     print(ticker,',',name)
  90. print('\n')
  91.  
  92. print('Top Gainers:')
  93. for ticker, name in zip(tickers_gainers, names_gainers):
  94.     print(ticker,',',name)
  95. print('\n')
  96.  
  97. print('Top Losers:')
  98. for ticker, name in zip(tickers_losers, names_losers):
  99.     print(ticker,',',name)
  100. print('\n')
  101.  
  102. previousclose_mostactive = []
  103. openprice_mostactive = []
  104. volume_mostactive = []
  105. marketcap_mostactive = []
  106.  
  107. url_pattern = 'https://finance.yahoo.com/quote/{}/'
  108.  
  109. for ticker in tickers_mostactive:
  110.     url = url_pattern.format(ticker)
  111.    
  112.     url_extract = requests.get(url).text
  113.    
  114.     soup = BeautifulSoup(url_extract, 'lxml')
  115.    
  116.     td_previousclose = soup.find_all('td')[1]
  117.     td_openprice = soup.find_all('td') [3]
  118.     td_volume = soup.find_all('td')[13]
  119.     td_marketcap = soup.find_all('td')[17]
  120.     # located previous close, open price, volume, and market cap
  121.     # consistent for all stocks
  122.  
  123.     span_previousclose = str(td_previousclose.find_all('span'))
  124.     span_openprice = str(td_openprice.find_all('span'))
  125.     span_volume = str(td_volume.find_all('span'))
  126.     span_marketcap = str(td_marketcap.find_all('span'))
  127.     # used to trim down and to convert to string for manipulation
  128.  
  129.     split_previousclose = span_previousclose.split('">')[1]
  130.     split_openprice = span_openprice.split('">')[1]
  131.     split_volume = span_volume.split('">')[1]
  132.     split_marketcap = span_marketcap.split('">')[1]
  133.     # split to trim down even more
  134.  
  135.     previousclose = (split_previousclose.split('<')[0])
  136.     openprice = (split_openprice.split('<')[0])
  137.     volume = (split_volume.split('<')[0])
  138.     marketcap = (split_marketcap.split('<')[0])
  139.     # split to trim down even to just get attributes needed
  140.  
  141.     previousclose_mostactive.append(previousclose)
  142.     openprice_mostactive.append(openprice)
  143.     volume_mostactive.append(volume)
  144.     marketcap_mostactive.append(marketcap)
  145.  
  146. previousclose_gainers = []
  147. openprice_gainers = []
  148. volume_gainers = []
  149. marketcap_gainers = []
  150.  
  151. for ticker in tickers_gainers:
  152.     url = url_pattern.format(ticker)
  153.    
  154.     url_extract = requests.get(url).text
  155.    
  156.     soup = BeautifulSoup(url_extract, 'lxml')
  157.    
  158.     td_previousclose = soup.find_all('td')[1]
  159.     td_openprice = soup.find_all('td') [3]
  160.     td_volume = soup.find_all('td')[13]
  161.     td_marketcap = soup.find_all('td')[17]
  162.     # located previous close, open price, volume, and market cap
  163.     # consistent for all stocks
  164.  
  165.     span_previousclose = str(td_previousclose.find_all('span'))
  166.     span_openprice = str(td_openprice.find_all('span'))
  167.     span_volume = str(td_volume.find_all('span'))
  168.     span_marketcap = str(td_marketcap.find_all('span'))
  169.     # used to trim down and to convert to string for manipulation
  170.  
  171.     split_previousclose = span_previousclose.split('">')[1]
  172.     split_openprice = span_openprice.split('">')[1]
  173.     split_volume = span_volume.split('">')[1]
  174.     split_marketcap = span_marketcap.split('">')[1]
  175.     # split to trim down even more
  176.  
  177.     previousclose = (split_previousclose.split('<')[0])
  178.     openprice = (split_openprice.split('<')[0])
  179.     volume = (split_volume.split('<')[0])
  180.     marketcap = (split_marketcap.split('<')[0])
  181.     # split to trim down even to just get attributes needed
  182.  
  183.     previousclose_gainers.append(previousclose)
  184.     openprice_gainers.append(openprice)
  185.     volume_gainers.append(volume)
  186.     marketcap_gainers.append(marketcap)
  187.  
  188. previousclose_losers = []
  189. openprice_losers = []
  190. volume_losers = []
  191. marketcap_losers = []
  192.  
  193. for ticker in tickers_losers:
  194.     url = url_pattern.format(ticker)
  195.    
  196.     url_extract = requests.get(url).text
  197.    
  198.     soup = BeautifulSoup(url_extract, 'lxml')
  199.    
  200.     td_previousclose = soup.find_all('td')[1]
  201.     td_openprice = soup.find_all('td') [3]
  202.     td_volume = soup.find_all('td')[13]
  203.     td_marketcap = soup.find_all('td')[17]
  204.     # located previous close, open price, volume, and market cap
  205.     # consistent for all stocks
  206.  
  207.     span_previousclose = str(td_previousclose.find_all('span'))
  208.     span_openprice = str(td_openprice.find_all('span'))
  209.     span_volume = str(td_volume.find_all('span'))
  210.     span_marketcap = str(td_marketcap.find_all('span'))
  211.     # used to trim down and to convert to string for manipulation
  212.  
  213.     split_previousclose = span_previousclose.split('">')[1]
  214.     split_openprice = span_openprice.split('">')[1]
  215.     split_volume = span_volume.split('">')[1]
  216.     split_marketcap = span_marketcap.split('">')[1]
  217.     # split to trim down even more
  218.  
  219.     previousclose = (split_previousclose.split('<')[0])
  220.     openprice = (split_openprice.split('<')[0])
  221.     volume = (split_volume.split('<')[0])
  222.     marketcap = (split_marketcap.split('<')[0])
  223.     # split to trim down even to just get attributes needed
  224.  
  225.     previousclose_losers.append(previousclose)
  226.     openprice_losers.append(openprice)
  227.     volume_losers.append(volume)
  228.     marketcap_losers.append(marketcap)
  229.  
  230. column_headers = ['Ticker', 'Name', 'Previous Close', 'Open Price', 'Volume', 'Market Cap']
  231. break_mostactive = ['Most Active']
  232. break_gainers = ['Gainers']
  233. break_losers = ['Losers']
  234.  
  235. rows_mostactive = zip(tickers_mostactive, names_mostactive, previousclose_mostactive, openprice_mostactive, volume_mostactive, marketcap_mostactive)
  236. rows_gainers = zip(tickers_gainers, names_gainers, previousclose_gainers, openprice_gainers, volume_gainers, marketcap_gainers)
  237. rows_losers = zip(tickers_losers, names_losers, previousclose_losers, openprice_losers, volume_losers, marketcap_losers)
  238.  
  239.  
  240.  
  241. with open('stocks.csv', 'w') as f:
  242.     writer = csv.writer(f)
  243.     writer.writerow(column_headers)
  244.     writer.writerow(break_mostactive)
  245.     for row in rows_mostactive:
  246.         writer.writerow(row)
  247.     writer.writerow(break_gainers)
  248.     for row in rows_gainers:
  249.         writer.writerow(row)
  250.     writer.writerow(break_losers)
  251.     for row in rows_losers:
  252.         writer.writerow(row)
  253.        
  254. print('stocks.csv created')
  255. print('\n')
  256.  
  257. stonks_file = 'stocks.csv'
  258.  
  259. reader = csv.reader(open('stocks.csv'))
  260.  
  261. stonks = {}
  262.  
  263. for row in reader:
  264.     key = row[0]
  265.     if key in stonks:
  266.         pass
  267.     stonks[key] = row[1:]
  268.  
  269. while True:
  270.    
  271.     stonk = input('Which stock do you want to know more about? Enter the stock ticker:').upper()    
  272.    
  273.     if (stonk == 'ticker') or (stonk == 'most active') or (stonk == 'gainers') or (stonk == 'losers') or (stonk not in stonks):
  274.         print('You did not enter a valid stock ticker!')
  275.         break
  276.  
  277.     elif stonk in stonks:
  278.         stonk_info = list(stonks[stonk])
  279.         print('Ticker:', stonk)
  280.         print('Name:', stonk_info[0])
  281.         print('Previous Close:', stonk_info[1])
  282.         print('Open Price:', stonk_info[2])
  283.         print('Volume:', stonk_info[3])
  284.         print('Market Cap:', stonk_info[4])
  285.        
  286.     restart = input('Do you want to look at another one? (yes/no)').lower()
  287.    
  288.     if (restart == 'yes'):
  289.         continue
  290.        
  291.     elif (restart == 'no'):
  292.         print('Goodbye!')
  293.         break
  294.        
  295.     elif (restart != 'yes') or (restart != 'no'):
  296.         print('You did not enter a valid answer!')
  297.         break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement