Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -38,15 +38,36 @@ sentiment_pipeline = pipeline("sentiment-analysis", model=model, tokenizer=token
|
|
| 38 |
def fetch_news(ticker):
|
| 39 |
try:
|
| 40 |
url = f"https://finviz.com/quote.ashx?t={ticker}"
|
| 41 |
-
headers = {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
response = requests.get(url, headers=headers)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
soup = BeautifulSoup(response.text, 'html.parser')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
news_table = soup.find(id='news-table')
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
news = []
|
| 46 |
for row in news_table.findAll('tr')[:50]: # Fetch up to 50 articles
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
|
|
|
|
|
|
| 50 |
return news
|
| 51 |
except Exception as e:
|
| 52 |
st.error(f"Failed to fetch news for {ticker}: {e}")
|
|
@@ -66,6 +87,8 @@ st.markdown("""
|
|
| 66 |
This tool parses stock tickers and analyzes the sentiment of related news articles.
|
| 67 |
|
| 68 |
💡 *Example input:* `META, NVDA, AAPL, NTES, NCTY`
|
|
|
|
|
|
|
| 69 |
""")
|
| 70 |
|
| 71 |
# Input field for stock tickers
|
|
|
|
| 38 |
def fetch_news(ticker):
|
| 39 |
try:
|
| 40 |
url = f"https://finviz.com/quote.ashx?t={ticker}"
|
| 41 |
+
headers = {
|
| 42 |
+
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
|
| 43 |
+
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
|
| 44 |
+
'Accept-Language': 'en-US,en;q=0.5',
|
| 45 |
+
'Referer': 'https://finviz.com/',
|
| 46 |
+
'Connection': 'keep-alive',
|
| 47 |
+
}
|
| 48 |
response = requests.get(url, headers=headers)
|
| 49 |
+
if response.status_code != 200:
|
| 50 |
+
st.error(f"Failed to fetch page for {ticker}: Status code {response.status_code}")
|
| 51 |
+
return []
|
| 52 |
+
|
| 53 |
soup = BeautifulSoup(response.text, 'html.parser')
|
| 54 |
+
title = soup.title.text if soup.title else ""
|
| 55 |
+
if ticker not in title:
|
| 56 |
+
st.error(f"Page for {ticker} not found or access denied.")
|
| 57 |
+
return []
|
| 58 |
+
|
| 59 |
news_table = soup.find(id='news-table')
|
| 60 |
+
if news_table is None:
|
| 61 |
+
st.error(f"News table not found for {ticker}. The website structure might have changed.")
|
| 62 |
+
return []
|
| 63 |
+
|
| 64 |
news = []
|
| 65 |
for row in news_table.findAll('tr')[:50]: # Fetch up to 50 articles
|
| 66 |
+
a_tag = row.find('a')
|
| 67 |
+
if a_tag:
|
| 68 |
+
title = a_tag.get_text()
|
| 69 |
+
link = a_tag['href']
|
| 70 |
+
news.append({'title': title, 'link': link})
|
| 71 |
return news
|
| 72 |
except Exception as e:
|
| 73 |
st.error(f"Failed to fetch news for {ticker}: {e}")
|
|
|
|
| 87 |
This tool parses stock tickers and analyzes the sentiment of related news articles.
|
| 88 |
|
| 89 |
💡 *Example input:* `META, NVDA, AAPL, NTES, NCTY`
|
| 90 |
+
|
| 91 |
+
**Note:** If news fetching fails, it might be due to changes in the Finviz website structure or access restrictions. Please verify the website manually or try again later.
|
| 92 |
""")
|
| 93 |
|
| 94 |
# Input field for stock tickers
|