Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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
|
| 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 |
-
|
| 38 |
-
|
| 39 |
-
|
| 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 |
-
|
| 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)
|