So Im trying to have this script run multiple variables from the ticker
variable
Example ticker = ['NFLX','APPL']
How would I be able to loop this script so that I can run it on more than one variable
import requests
from bs4 import BeautifulSoup
ticker = 'NFLX'
url = 'https://finance.yahoo.com/quote/' + ticker
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
name = soup.find('div', {'class':'Mt(15px)'}).find_all('h1')[0].text
price = soup.find('div', {'class':'D(ib) Mend(20px)'}).find_all('span')[0].text
change = soup.find('div', {'class':'D(ib) Mend(20px)'}).find_all('span')[1].text
cap = soup.find('div', {'class':'D(ib) W(1/2) Bxz(bb) Pstart(12px) Va(t) ie-7_D(i) ie-7_Pos(a) smartphone_D(b) smartphone_W(100%) smartphone_Pstart(0px) smartphone_BdB smartphone_Bdc($seperatorColor)'}).find_all('span')[0].text
capnumber = soup.find('div', {'class':'D(ib) W(1/2) Bxz(bb) Pstart(12px) Va(t) ie-7_D(i) ie-7_Pos(a) smartphone_D(b) smartphone_W(100%) smartphone_Pstart(0px) smartphone_BdB smartphone_Bdc($seperatorColor)'}).find_all('span')[1].text
topnews = soup.find('h3', {'class':'Mb(5px)'}).find_all('a')[0].text
print(name)
print ('https://finance.yahoo.com/quote/' + ticker)
print("Last Price:",price)
print("Change:", change)
print(cap,":", capnumber)
print("Top News:", topnews)
The current script returns
Netflix, Inc. (NFLX)
https://finance.yahoo.com/quote/NFLX
Last Price: 658.29
Change: +4.23 (+0.65%)
Market Cap : 291.591B
Top News: Russia investigates Netflix after complaint over LGBT content
I would like it to still return the same layout but then spaced between each result or separated by a dash line
Im super new to coding, so Im sure this is a very cumbersome path to get the desired result, so if someone can provide suggestions too to make it neater that would be appreciated as well.
You can put everything into a method, then pass a parameter 'ticker' into it, one variable in the list at a time. Alternatively you can pass the whole list in and do the for loop inside the method.
import requests
from bs4 import BeautifulSoup
#given input
tickers = ['NFLX','APPL']
def urlDisplay(ticker):
url = 'https://finance.yahoo.com/quote/' + ticker
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
name = soup.find('div', {'class':'Mt(15px)'}).find_all('h1')[0].text
price = soup.find('div', {'class':'D(ib) Mend(20px)'}).find_all('span')[0].text
change = soup.find('div', {'class':'D(ib) Mend(20px)'}).find_all('span')[1].text
cap = soup.find('div', {'class':'D(ib) W(1/2) Bxz(bb) Pstart(12px) Va(t) ie-7_D(i) ie-7_Pos(a) smartphone_D(b) smartphone_W(100%) smartphone_Pstart(0px) smartphone_BdB smartphone_Bdc($seperatorColor)'}).find_all('span')[0].text
capnumber = soup.find('div', {'class':'D(ib) W(1/2) Bxz(bb) Pstart(12px) Va(t) ie-7_D(i) ie-7_Pos(a) smartphone_D(b) smartphone_W(100%) smartphone_Pstart(0px) smartphone_BdB smartphone_Bdc($seperatorColor)'}).find_all('span')[1].text
topnews = soup.find('h3', {'class':'Mb(5px)'}).find_all('a')[0].text
print(name)
#print('https://finance.yahoo.com/quote/' + ticker)
#can just print url variable straight away since you declared it already above.
print(url)
print("Last Price:",price)
print("Change:", change)
print(cap,":", capnumber)
print("Top News:", topnews)
#driver code
def main():
for i in tickers:
urlDisplay(i)
print('-' * 20)
if __name__ == "__main__":
main()