import gradio as gr import requests from bs4 import BeautifulSoup import random import logging # 디버깅 로그 레벨 설정 logging.basicConfig(level=logging.DEBUG) def scrape_blog_links(keyword): """ 입력받은 키워드를 사용하여 네이버 검색 페이지를 요청하고, 네이버 블로그 링크만 추출한 후, 랜덤하게 3개의 링크를 반환합니다. """ base_url = "https://search.naver.com/search.naver?ssc=tab.blog.all&sm=tab_jum&query=" url = base_url + keyword logging.debug(f"요청 URL: {url}") try: headers = {"User-Agent": "Mozilla/5.0"} response = requests.get(url, headers=headers, timeout=10) logging.debug(f"응답 상태 코드: {response.status_code}") if response.status_code != 200: logging.error("페이지 요청 실패") return "페이지 요청에 실패하였습니다." except Exception as e: logging.exception("요청 중 예외 발생") return f"예외 발생: {e}" soup = BeautifulSoup(response.text, "html.parser") detail_boxes = soup.find_all("div", class_="detail_box") logging.debug(f"detail_box 개수: {len(detail_boxes)}") blog_links = set() for box in detail_boxes: a_tags = box.find_all("a") for a in a_tags: href = a.get("href", "") cru = a.get("cru", "") logging.debug(f"a 태그 href: {href}, cru: {cru}") # 네이버 블로그 링크만 추출 (href 혹은 cru 속성 사용) if href.startswith("https://blog.naver.com/"): blog_links.add(href) elif cru.startswith("https://blog.naver.com/"): blog_links.add(cru) logging.debug(f"추출된 블로그 링크 개수: {len(blog_links)}") if not blog_links: return "네이버 블로그 링크를 찾을 수 없습니다." # 랜덤하게 최대 3개의 링크 선택 num_links = min(3, len(blog_links)) selected_links = random.sample(blog_links, num_links) logging.debug(f"랜덤으로 선택된 링크: {selected_links}") # 각 링크를 줄바꿈으로 구분하여 반환 return "\n".join(selected_links) # Gradio 인터페이스 생성 iface = gr.Interface( fn=scrape_blog_links, inputs=gr.Textbox(label="키워드 입력", placeholder="예: 오징어게임2"), outputs=gr.Textbox(label="랜덤 블로그 링크 출력"), title="네이버 블로그 링크 추출기", description="키워드를 입력하고 실행 버튼을 클릭하면 네이버 검색 결과에서 네이버 블로그 링크를 추출하여 랜덤하게 3개를 출력합니다." ) if __name__ == "__main__": logging.debug("앱 시작") iface.launch(debug=True)