import requests from bs4 import BeautifulSoup import pandas as pd import streamlit as st # 네이버 랭킹 뉴스 URL url = "https://news.naver.com/main/ranking/popularDay.naver" # 웹 페이지 요청 및 파싱 response = requests.get(url) soup = BeautifulSoup(response.content, 'html.parser') # 뉴스 리스트 추출 news_list = [] for news_item in soup.select('div.rankingnews_box ul.rankingnews_list li'): # 순위 번호가 존재하는지 확인 rank_tag = news_item.find('em', class_='list_ranking_num') rank = rank_tag.text if rank_tag else 'No Rank' # 제목이 존재하는지 확인 title_tag = news_item.find('a', class_='list_title') title = title_tag.text.strip() if title_tag else 'No Title' # 링크가 존재하는지 확인 link = title_tag['href'] if title_tag else '#' # 시간 정보가 존재하는지 확인 time_tag = news_item.find('span', class_='list_time') time = time_tag.text.strip() if time_tag else 'No Time' # 이미지 태그와 src 속성 확인 img_tag = news_item.find('img') image_url = img_tag['src'] if img_tag and 'src' in img_tag.attrs else 'No Image Available' news_list.append({ 'Rank': rank, 'Title': title, 'Link': link, 'Time': time, 'Image URL': image_url }) # 데이터프레임으로 변환 df = pd.DataFrame(news_list) # Streamlit에서 결과 표시 st.title("Naver Ranking News Scraper") # 개별 뉴스 항목 출력 for index, row in df.iterrows(): if row['Image URL'] != 'No Image Available': st.image(row['Image URL'], width=100) st.markdown(f"**[{row['Title']}]({row['Link']})**") st.write(f"Rank: {row['Rank']} | Time: {row['Time']}") st.write("---")