-
블로그 글 복사 - 네이버 블로그 텍스트 추출코딩 연습/코딩배우기 2024. 11. 24. 22:29반응형
네이버 블로그의 텍스트가 필요할 때 마우스 문장 하나씩 드래그하여 복사하는 방법도 있고, 혹시 블로그 글 복사 방지가 되어있을 때 브라우저의 설정에서 막힌 스크립트를 풀고 드래그를 하는 방법도 있지만, 아래처럼 프로그램을 만들어서 사용하는 방법도 있습니다.
네이버 블로그 텍스트 추출하기
위 프로그램의 소스코드는 다음과 같습니다.
import re from tkinter import * import tkinter as tk import tkinter.messagebox as msgbox import webbrowser import requests from bs4 import BeautifulSoup root = Tk() root.title('네이버 블로그 텍스트 추출') root.geometry('450x400+700+100') root.resizable(False, False) def extract_nblog(blog_url): headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36' } list_content_view.delete(0, END) # 리스트박스 내 모든 item 제거 list_content_view.insert(END, '블로그 텍스트 추출중...') list_content_view.update() ## iframe태그 찾아서 포스팅 URL 얻기 res = requests.get(blog_url, headers=headers) soup = BeautifulSoup(res.text, 'html.parser') iframe = soup.find('iframe', id='mainFrame') post_url = f'''https://blog.naver.com{iframe['src']}''' ## 포스팅 내용 추출하기 response = requests.get(post_url, headers=headers) soup2 = BeautifulSoup(response.text, 'html.parser') post_body = soup2.find('div', id='postListBody') # 제목 추출 blog_title = '' if blog_tit := post_body.find('div', class_= 'pcol1'): if blog_tit.find('span'): blog_title = blog_tit.find('span').text.strip().replace('\n', '') else: blog_title = blog_tit.find('h3').text.strip().replace('\n', '') print(f'\n[title] : {blog_title}') list_content_view.insert(END, '블로그 제목:') list_content_view.insert(END, blog_title) list_content_view.update() # 등록일 추출 blog_regist_day = '' if blog_regist := post_body.find('span', class_= re.compile('^se_publishDate pcol2.*')): blog_regist_day = blog_regist.text.strip().replace('\n', '') print(f'\n[regist_day] : {blog_regist_day}') list_content_view.insert(END, blog_regist_day) list_content_view.update() # 본문 내용 추출 if pbody := post_body.find('div', class_='se-main-container'): body_content = pbody.find_all('p') elif pbody := post_body.find('div', id='postViewArea'): body_content = pbody.find_all('p') elif pbody := post_body.find('div', {'class': re.compile('^se_component_wrap sect_dsc __se_component_area.*')}): body_content = pbody.find_all('p') else: body_content = pbody.find_all('p') # 텍스트를 단일 문자열로 연결 extracted_text = '\n'.join(p.get_text() for p in body_content if p.get_text().strip()) list_content_view.insert(END, extracted_text) list_content_view.update() list_content_view.insert(END, '추출 완료...') list_content_view.update() ## 블로그 텍스트 저장 body_contents = '\n[제목] : ' + blog_title + ' [' + blog_regist_day + ']\n[블로그 URL] : ' + blog_url + '\n\n[글 본문] : \n' + extracted_text with open('./' + blog_title + '.txt', 'w', encoding='utf-8') as f: f.write(body_contents) print('\n블로그 텍스트 저장 완료!\n') return True def func_quit(): root.quit() # root.destroy() def read_me(): msgbox.showwarning('Info', '네이버 블로그 텍스트 파일을 추출하여 파일로 저장합니다.\n\n' '네이버 블로그 브라우저에서 URL전체, 예로 "https://blog.naver.com/borame365/223608080184"를 복사후 붙여넣기합니다.\n' '"추출 시작" 버튼을 클릭하면 네이버 블로그의 텍스트가 추출됩니다.\n\n' '본 프로그램이 있는 경로(폴더)에 "제목.txt" 파일로 저장됩니다.\n') def callback(url): webbrowser.open_new(url) # 시작 버튼 def start(): # 입력란이 비었는지 확인 if not len(txt_entry_url.get()): # len(txt_dest_path.get()) == 0: msgbox.showwarning('Info', '네이버 블로그 주소(URL)를 입력하세요!') return url = txt_entry_url.get() # naver keyword # save_dir = txt_dest_path.get() # save path if "blog.naver.com" not in url: msgbox.showwarning('Info', '네이버 블로그 주소(URL)를 입력하세요!') txt_entry_url.delete(0, tk.END) return if len(txt_entry_url.get()): state_var.set(f'실행중.....') root.update_idletasks() down_result = extract_nblog(url) # 함수 호출 if down_result: state_var.set('추출 작업 완료..!!') else: state_var.set('중지됨..!!') else: msgbox.showerror('오류', '내용을 정확하게 입력하세요!') return # 사용법 표시 들어갈 공간 lbl_use_frame = Frame(root) lbl_use_frame.pack(fill='x', padx=2, pady=2) txt_url = '사용법>>' lbl_url_txt = Label(lbl_use_frame, text=txt_url, font=('Helveticabold', 10, 'bold'), justify='left', fg='blue', cursor='hand2') lbl_url_txt.pack(side='right', fill='x', padx=7, pady=5, ipadx=1) lbl_url_txt.bind('<Button-1>', lambda e: callback('https://itssu.kr/%eb%84%a4%ec%9d%b4%eb%b2%84-%eb%b8%94%eb%a1%9c%ea%b7%b8-%eb%b3%b5%ec%82%ac-%ea%b8%88%ec%a7%80-%ed%85%8d%ec%8a%a4%ed%8a%b8-%ec%b6%94%ec%b6%9c/')) # URL 입력 설명 LabelFrame url_frame = LabelFrame(root, text="네이버 블로그 URL(https:// 포함) 입력 후 '추출 시작' 버튼을 클릭하세요.") url_frame.pack(fill="x", padx=10, pady=5, ipady=5) # URL 입력 레이블 lbl_url = Label(url_frame, text='블로그 URL :', width=10) lbl_url.configure(font=('Arial', 10, 'bold')) lbl_url.pack(side='left', padx=5, pady=5) # URL 입력 란 txt_entry_url = Entry(url_frame) txt_entry_url.insert(0, '') txt_entry_url.pack(side='left', fill='x', expand=True, padx=5, pady=5) # URL 추출 - 텍스트 파일 저장 알림 lbl_ex_frame = Frame(root) lbl_ex_frame.pack(fill='x', padx=8, pady=0) lbl_ex_url1 = Label(lbl_ex_frame, text="* 본 프로그램이 있는 폴더에 '제목.txt' 파일로 저장됨") lbl_ex_url1.pack(side='left') # URL 입력 레이블 - 오른쪽(Read Me) btn_url = Button(lbl_ex_frame, text='Read Me', width=7, command=read_me) btn_url.pack(side='right', padx=5, pady=5) # 리스트 프레임 - 데이터 추출 시 보이게 하는 Listbox 공간의 프레임 list_frame = Frame(root) list_frame.pack(fill='both', padx=10, pady=5) # 리스트박스 우측 스크롤 scrollbar = Scrollbar(list_frame) scrollbar.pack(side='right', fill='y') # 리스트박스 - 데이터 출력 현황 보이게 하는 곳 list_content_view = Listbox(list_frame, height=8, yscrollcommand=scrollbar.set) list_content_view.pack(side='left', fill='both', expand=True) scrollbar.config(command=list_content_view.yview) # 프로그램 실행 표시 들어갈 공간 lbl_execute_frame = Frame(root) lbl_execute_frame.pack(fill='x', padx=5, pady=5) state_var = StringVar() state_var.set(' ') lbl_state_txt = Label(lbl_execute_frame, textvariable=state_var) lbl_state_txt.configure(font=('Arial', 12, 'bold', 'italic')) lbl_state_txt.pack(side='right', fill='x', padx=5, pady=5) # 실행 프레임 - 시작, 닫기 frame_run = Frame(root) frame_run.pack(fill='x', padx=10, pady=5) btn_close = Button(frame_run, padx=5, pady=5, text='닫기', width=12, fg='black', cursor='hand2', command=func_quit) btn_close.pack(side='right', padx=5, pady=5) btn_start = Button(frame_run, padx=5, pady=5, text='추출 시작', width=12, fg='black', cursor='hand2', command=start) btn_start.configure(font=('Arial', 10, 'bold')) btn_start.pack(side='right', padx=5, pady=5) root.mainloop()
위 코드는 파이썬 tkinter로 만든 GUI 프로그램이며, 네이버 블로그 페이지의 텍스트를 추출하고, 파일로 저장하는 기능이 포함되어 있습니다.
반응형'코딩 연습 > 코딩배우기' 카테고리의 다른 글
파이썬 정규식 r'[^\w]' 의미와 re.sub(r'[^\w\s]', '', text) 사용 (0) 2025.02.01 파이썬 정규표현식 r'"(.*?)" ' 과 re.DOTALL 알아보기 (0) 2025.02.01 티스토리 글쓰기 - 파이썬 selenium 자동 등록 코드 (0) 2024.11.21 html color에 사용할 rgb 색상표 만들기 (0) 2024.09.08 블로그스팟 포스팅 URL 글 목록 전체 가져오기 (0) 2024.08.25