본문 바로가기
코딩 연습/코딩배우기

네이버 블로그 페이지에 있는 글 저장 및 이미지 다운로드하는 기능 만들기(with 파이썬)

by good4me 2021. 11. 12.

goodthings4me.tistory.com

 

하나의 네이버 블로그 페이지에 있는 글 저장 및 이미지 다운로드 기능 구현

 

파이썬으로 초보 수준의 스크래핑(크롤링)을 공부하다가 네이버 블로그 글 저장 및 이미지 다운로드 기능을 한 번 만들어 보았다.

 

import requests
from bs4 import BeautifulSoup
from bs4 import Comment
from PIL import Image
import re
import os


def extract_naverBlog():
    url = 'https://blog.naver.com/borame365/222565935979'
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    ifra = soup.find('iframe', id='mainFrame')
    post_url = 'https://blog.naver.com' + ifra['src']
    print(post_url)


    res = requests.get(post_url)
    soup2 = BeautifulSoup(res.text, 'html.parser')
    
    # 제목 추출
    titles = soup2.find_all('div', {'class': re.compile('^se-module se-module-text se-title-tex.*')})
    post_title = titles[0].text
    post_title = post_title.replace('\n', '')

    special_char = '\/:*?"<>|.'
    for c in special_char:
        if c in post_title:
            post_title = post_title.replace(c, '')  # 특수 문자 제거
        
    # 저장 폴더 만들기
    dir_names = post_title.replace(' ', '').replace('\n', '')
    if not os.path.exists('naverBlog'):
        os.mkdir('naverBlog')
    else:
        pass
    if not os.path.exists('naverBlog/' + dir_names):
        os.makedirs('naverBlog/' + dir_names)
    else:
        pass
    
    post_dir_name = 'naverBlog/' + dir_names
    
    # 본문 내용을 html 타입으로 저장
    # script 등 태그 제거
    [x.extract() for x in soup2.find_all('script')]
    [x.extract() for x in soup2.find_all('style')]
    [x.extract() for x in soup2.find_all('meta')]
    [x.extract() for x in soup2.find_all('noscript')]
    [x.extract() for x in soup2.find_all(text=lambda text:isinstance(text, Comment))]                
        
    html = soup2.prettify("utf-8")
    html_filename = post_title.replace('\n', '') + '.html'
    with open(post_dir_name + '/' + html_filename, 'wb') as f:
        f.write(html)                
    
    # 페이지 내용(텍스트) 추출
    contents = ''
    txt_contents = soup2.find_all('div', {'class': re.compile('^se-module se-module-tex.*')})
    for p_span in txt_contents:
        for txt in p_span.find_all('span'):
            print(txt.get_text() + '\n')
            contents += txt.get_text() + '\n'

    txt_filename = post_title.replace('\n', '') + '.txt'
    with open(post_dir_name + '/' + txt_filename, 'w', encoding='utf-8') as f:
        f.write(contents)                       
    
    # 이미지 추출
    imgs = soup2.find_all('img', class_='se-image-resource')
    # print(len(imgs))
    # print(imgs)
    cnt = 1
    for img in imgs:
        # <img src=  가 아닌  data-lazy-src=  부분을 가져와야 큰 이미지임
        print(img.get('data-lazy-src'))  # img['data-lazy-src']
        img_url = img.get('data-lazy-src')
        ## pillow.Image로 이미지 format 알아내기
        imageObj = Image.open(requests.get(img_url, stream=True).raw)
        img_format = imageObj.format                    
        res_img = requests.get(img_url).content
        
        if img_format:
            img_name = str(cnt) + '.' + img_format
        else:
            img_name = str(cnt) + '.jpg'
        
        print(img_name)

        if len(res_img) > 100:  # 이미지 용량이 00 bytes 이상인 것만
            with open(post_dir_name + '/' + img_name, 'wb') as f:
                f.write(res_img)
            cnt += 1    


extract_naverBlog()

 

good4me.co.kr

 

 

정보 과잉 시대인 요즘, 
나에게 꼭 필요한 정보를 찾아 나의 것으로 만들고 새로운 가치를 창출할 수 있는 능력이 절실히 필요한데, 
넘쳐나는 수많은 정보(인터넷 글, 이미지, 영상 등등) 속에서 관련 정보를 찾아 어떻게 가져올지 고민이 될 때가 많다. 

네이버 블로그 글을 보다가 내 글에 인용하고 싶거나 각색해서 다시 쓰고 싶은 좋은 글을 발췌하고 싶을 때, 페이지 내 마우스 우클릭 금지 기능 등으로 저장이 안 되어서 일일이 타이핑을 해 놓고 인용하는 경우가 있다. 

물론, 타인의 글이나 이미지를 함부로 쓰면 절대 안 되는 것이고, 
쓰더라도 출처를 꼭 밝혀야 하는 것은 오프라인이든 온라인이든 당연한 것!!

 

 

파이썬 Tkinter로 만들어본 프로그램

 

※ 네이버 블로그 저장 프로그램 다운로드 : 여기(클릭)

 

 

 

네이버 블로그의 전체 페이지 저장하기(방법 설명)

하나의 네이버 아이디로 작성한 블로그 전체 페이지에 대해 콘텐츠를 저장하려면 글 전체보기의 목록에서 각 리스트의 블로그 주소(URL)를 추출하고, 해당 블로그 페이지를 순환

goodthings4me.tistory.com

 

댓글