QuantumLearner commited on
Commit
92dd357
·
verified ·
1 Parent(s): bfcc007

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +6 -35
app.py CHANGED
@@ -10,12 +10,9 @@ from nltk.sentiment.vader import SentimentIntensityAnalyzer
10
 
11
  nltk.download('vader_lexicon')
12
 
13
- st.set_page_config(page_title = "Daily News with Sentiment Analysis", layout = "wide")
14
  st.title('Daily News with Sentiment Analysis')
15
 
16
- # Streamlit App
17
- #st.title('Daily News with Sentiment Analysis')
18
-
19
  # Sidebar inputs
20
  st.sidebar.title('Input Parameters')
21
 
@@ -26,29 +23,11 @@ st.sidebar.markdown("""
26
  3. **View Sentiment**: See articles with sentiment scores (-1 to 1).
27
  4. **Sort & Download**: Sort data and download as CSV if needed.
28
  """)
29
-
30
- ticker = st.sidebar.text_input('Enter Stock Ticker', 'AAPL')
31
-
32
- def get_finviz_news_raw(ticker):
33
- finviz_url = f'https://finviz.com/quote.ashx?t={ticker}'
34
- headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0'}
35
- response = requests.get(finviz_url, headers=headers)
36
 
37
- if response.status_code != 200:
38
- st.error(f"Error fetching data for {ticker}")
39
- return None
40
-
41
- soup = BeautifulSoup(response.text, "html.parser")
42
- news_table = soup.find("table", class_="fullview-news-outer")
43
 
44
- if not news_table:
45
- st.error(f"No news found for {ticker}")
46
- return None
47
-
48
-
49
- nltk.download('vader_lexicon')
50
-
51
- # Function to get news from Finviz
52
  def get_finviz_news_raw(ticker):
53
  finviz_url = f'https://finviz.com/quote.ashx?t={ticker}'
54
  headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0'}
@@ -74,10 +53,7 @@ def get_finviz_news_raw(ticker):
74
  news_title_cell = row.find("a", class_="tab-link-news")
75
 
76
  date_time_str = date_time_cell.get_text().strip() if date_time_cell else ''
77
- #news_source = news_source_cell.get_text().strip("()") if news_source_cell else ''
78
- #news_source = news_source_cell.get_text().replace('(', '').replace(')', '') if news_source_cell else ''
79
  news_source = news_source_cell.get_text() if news_source_cell else ''
80
-
81
  news_title = news_title_cell.get_text().strip() if news_title_cell else ''
82
  news_link = news_title_cell['href'] if news_title_cell else ''
83
 
@@ -104,7 +80,6 @@ def analyze_sentiment(text):
104
  sentiment = sia.polarity_scores(text)
105
  return sentiment['compound'] # Sentiment score between -1 (negative) and 1 (positive)
106
 
107
-
108
  # Fetch and display news when the button is pressed
109
  if st.sidebar.button('Get News'):
110
  news_df_raw = get_finviz_news_raw(ticker)
@@ -155,10 +130,8 @@ if st.sidebar.button('Get News'):
155
  df.drop(columns=['Cleaned_Title', 'Datetime', 'Source'], inplace=True)
156
  df = df.reset_index(drop=True)
157
 
158
-
159
  st.write(f"## News for {ticker}")
160
- #st.dataframe(df, height=600, width=1000) # Use st.dataframe with height and width to allow for resizing and better display
161
- #st.table(df)
162
 
163
  # Option to download data as CSV
164
  csv = df.to_csv(index=False).encode('utf-8')
@@ -168,15 +141,13 @@ if st.sidebar.button('Get News'):
168
  file_name=f'{ticker}_news_sentiment.csv',
169
  mime='text/csv',
170
  )
171
- st.table(df)
172
  else:
173
  st.write(f"No news found for {ticker}")
174
 
175
-
176
  hide_streamlit_style = """
177
  <style>
178
  #MainMenu {visibility: hidden;}
179
  footer {visibility: hidden;}
180
  </style>
181
  """
182
- st.markdown(hide_streamlit_style, unsafe_allow_html=True)
 
10
 
11
  nltk.download('vader_lexicon')
12
 
13
+ st.set_page_config(page_title="Daily Stock Market News with Sentiment Analysis", layout="wide")
14
  st.title('Daily News with Sentiment Analysis')
15
 
 
 
 
16
  # Sidebar inputs
17
  st.sidebar.title('Input Parameters')
18
 
 
23
  3. **View Sentiment**: See articles with sentiment scores (-1 to 1).
24
  4. **Sort & Download**: Sort data and download as CSV if needed.
25
  """)
 
 
 
 
 
 
 
26
 
27
+ # Wrapping the stock ticker input in an expander
28
+ with st.sidebar.expander("Stock Ticker Input", expanded=True):
29
+ ticker = st.text_input('Enter Stock Ticker', 'AAPL')
 
 
 
30
 
 
 
 
 
 
 
 
 
31
  def get_finviz_news_raw(ticker):
32
  finviz_url = f'https://finviz.com/quote.ashx?t={ticker}'
33
  headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0'}
 
53
  news_title_cell = row.find("a", class_="tab-link-news")
54
 
55
  date_time_str = date_time_cell.get_text().strip() if date_time_cell else ''
 
 
56
  news_source = news_source_cell.get_text() if news_source_cell else ''
 
57
  news_title = news_title_cell.get_text().strip() if news_title_cell else ''
58
  news_link = news_title_cell['href'] if news_title_cell else ''
59
 
 
80
  sentiment = sia.polarity_scores(text)
81
  return sentiment['compound'] # Sentiment score between -1 (negative) and 1 (positive)
82
 
 
83
  # Fetch and display news when the button is pressed
84
  if st.sidebar.button('Get News'):
85
  news_df_raw = get_finviz_news_raw(ticker)
 
130
  df.drop(columns=['Cleaned_Title', 'Datetime', 'Source'], inplace=True)
131
  df = df.reset_index(drop=True)
132
 
 
133
  st.write(f"## News for {ticker}")
134
+ st.dataframe(df, use_container_width=True, height=800) # Increased height to 800 pixels
 
135
 
136
  # Option to download data as CSV
137
  csv = df.to_csv(index=False).encode('utf-8')
 
141
  file_name=f'{ticker}_news_sentiment.csv',
142
  mime='text/csv',
143
  )
 
144
  else:
145
  st.write(f"No news found for {ticker}")
146
 
 
147
  hide_streamlit_style = """
148
  <style>
149
  #MainMenu {visibility: hidden;}
150
  footer {visibility: hidden;}
151
  </style>
152
  """
153
+ st.markdown(hide_streamlit_style, unsafe_allow_html=True)