이번 거는 네이버 블로그에 궁금하신 분들 있을 것 같아요. 네이버 블로쪽에 여러분들 콘텐츠를 엄청 많이 쌓아두지 않습니까 그런데 보면 여러분들 중에 백업을 하시는 분들이 아까 많이 궁금하실 거예요. 네이버 블로쪽에 백업을 못 해서 많이 고민이신 분들이 많으실 거예요. 왜냐하면 네이버 쪽에 블로그가 저 품질이 왔다 하면 그동안 노고로 쌓아놨었던 네이버 블로그의 양질의 콘텐츠들은 다 어떻게 됩니까? 한 순간에 완전 날벼락 맞는 거잖아요. 그거를 방지하기 위해서 만들어 놓은 게 여러분들의 양질의 그런 콘텐츠들을 백업을 해놔야 되는 게 중요합니다. 오늘의 파이썬 코딩을 가지고 왔었던 거는 바로 이런 네이버 블로여러분들이 가지고 있었던 것에 이 블로그에 텍스트와 이미지를 백업을 하는 거예요. 코딩을 가지고 왔습니다.
파이썬 네이버 블로그 텍스트, 이미지 백업 해보기
밑에 있는 건데 한마디로 단순합니다. 이걸 제가 가지고 오긴 했었었는데 테스트를 해봤었는데 딱 보면 공유 폴더 안에 딱 나오면 html 파일하고 그다음에 여러분들의 블로그를 썼었던 텍스트하고 여러분이 업로드를 했었던 이미지 이거를 다 가지고 옵니다. 폴더 안에다가 집어넣은 거라고 보시면 돼요 이런 식으로 해서 여러분들의 소중한 디지털 콘텐츠의 자산이 어떤 저품질이나 이런 것으로 인해서 노고가 많이 줄어들지 않도록 그런 미안해 방지 차원에서 이런 블로백업을 해놓은 게 중요하다라는 걸로 보시고 들어가시면 괜찮을 것 같아요. 만들어 놓은 건데 이용할 것 같습니다. 여러분들 네이버 블로그를 이용하셨을 때 텍스트라든가 이미지 이런 것들을 보관을 하는 게 중요할 것 같아요. 그런 용도로 쓰이는 파이썬 코딩이라고 보시면 됩니다. 네 여기까지만 참고하시면 될 것 같습니다.
import requests
from bs4 import BeautifulSoup
from bs4 import Comment
from PIL import Image
import re
import os
def extract_naverBlog(url):
#rl = 'https://blog.naver.com/tkdgml1013/222840145390'
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
url = 'https://blog.naver.com/tkdgml1013/222840145390'
extract_naverBlog(url)
'Python' 카테고리의 다른 글
[파이썬] 인스타그램 DM 발송 자동화 (0) | 2022.08.09 |
---|---|
[파이썬] 티스토리 이미지, 텍스트 백업해보기 (0) | 2022.08.08 |
[파이썬] 네이버 애널리틱스 키워드별 유입 엑셀 파일 가공 그래프 시각화 (0) | 2022.08.08 |
[파이썬] 스마트스토어 채널별 유입 엑셀 파일 가공 그래프 시각화 (0) | 2022.08.08 |
[파이썬] 네이버 광고 API 활용해보기 (0) | 2022.08.07 |
댓글