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()
정보 과잉 시대인 요즘,
나에게 꼭 필요한 정보를 찾아 나의 것으로 만들고 새로운 가치를 창출할 수 있는 능력이 절실히 필요한데,
넘쳐나는 수많은 정보(인터넷 글, 이미지, 영상 등등) 속에서 관련 정보를 찾아 어떻게 가져올지 고민이 될 때가 많다.
네이버 블로그 글을 보다가 내 글에 인용하고 싶거나 각색해서 다시 쓰고 싶은 좋은 글을 발췌하고 싶을 때, 페이지 내 마우스 우클릭 금지 기능 등으로 저장이 안 되어서 일일이 타이핑을 해 놓고 인용하는 경우가 있다.
물론, 타인의 글이나 이미지를 함부로 쓰면 절대 안 되는 것이고,
쓰더라도 출처를 꼭 밝혀야 하는 것은 오프라인이든 온라인이든 당연한 것!!
파이썬 Tkinter로 만들어본 프로그램
※ 네이버 블로그 저장 프로그램 다운로드 : 여기(클릭)
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
파이썬 Tkinter 처음부터 차근차근 따라 하면서 배워보기 (0) | 2021.11.24 |
---|---|
파이썬 qrcode, tkinter 모듈로 만든 QR코드 생성기 (0) | 2021.11.21 |
파이썬 장고(django) 웹 프로그래밍 - 웹 페이지 만들기 # 2 (0) | 2021.11.03 |
네이버 검색어 중 자동완성어 추출해보기(with 파이썬) (0) | 2021.10.15 |
[python] 장고(django)로 게시판 만들어보기 (1) | 2021.10.11 |
댓글