본문 바로가기
Python

[파이썬] 네이버 블로그 정규식으로 포스팅 텍스트 교정

by 퍼포먼스마케팅코더 2022. 8. 12.
반응형

오늘은 조금 다르지만 네이버 블로그쪽에서 테스트 교정이 가능한 것에 대해서 조금 글을 써보도록 하겠습니다. 좀 복잡하긴 해요. 파이톤에서 네이버 블로그를 테스트 교정해주는 파이톤 내부적으로 정규식이라는 것이 있습니다. 정규직이라는것은 규칙적으로 되어 있는 문자열이나 숫자,영어,한글 등이있으면요. 교정해 줄 거라고 생각하세요. 천천히 코딩에 대해서 설명을 드리는데 처음이에요. 그러니까 아래 텍스트를 가져오는 것이라는 것만 확인해 주세요.두 번째로 나와 있는 것이 중요합니다.

파이썬 네이버 블로그 정규식으로 포스팅 텍스트 교정

처음에는 여러분이 이미 알고 계신 블로그 중에 텍스트를 가져오는 코딩이었다면 두 번째부터 조금 다른데요. 첫 번째는 특수문자를 제거하는 것입니다. 특수문자를 삭제하고 마침표로 되어 있는 것이 있는데 마침표로 되어 있는 것에 대한 문장을 하나로 목록 형식으로 만들어 놓도록 하겠습니다.

 

import requests
from    bs4      import BeautifulSoup
import re

url ='https://blog.naver.com/idear2011/222804660339'

blogId = re.search('https://blog.naver.com/(.+?)/', url).group(1) #해당 블로그 ID만 가져오기
postId = re.search('https://blog.naver.com/(.+?)/(.+)', url).group(2) #해당 포스트 ID만 가져오기

blog_url = 'https://blog.naver.com/PostView.naver?blogId={}&logNo={}'.format(blogId, postId)

raw = requests.get("https://blog.naver.com/PostView.naver?blogId={}&logNo={}".format(blogId, postId))  #협찬
html = BeautifulSoup(raw.text, 'lxml') #긁기

title = html.find("meta", property= "og:title") #제목
#desc = html.find("meta", property= "og:description") #스니펫

content_txt = []
content_txt_2 = []

title_2 = title['content'] #제목
content = html.find("div", {"class" : "se-main-container"}).text #본문
content_txt.append(content)


#desc_2 = desc['content']
#desc_2 = desc_2.replace("...", "")
#print(desc_2) 

#content_2 = content.readlines()

    
for i in content_txt :
    nline = i.replace("\n", "")
    nline = nline.replace("\u200b", "")
    nline = nline.replace('↓', "") 
    content_txt_2.append(nline)
#print(content_txt_2) #확인

content_text = str(content_txt_2)  #최종본문

print("제목: " + str(title_2))  #제목확인
print("-------------------------------------------본문----------------------------------------------")
print(content_text) #최종본문확인
special_char = '~^\/:*?"<>|)#[]\''

for c in special_char:
    if c in content_text:
        content_text = content_text.replace(c, '')  # 특수 문자 제거

content_text = content_text.replace("!", ".")
content_text = content_text.replace(",", ".")
#content_text = content_text.replace(".", "..")

content_texts = list(content_text.split('.')) #마침표에 따라 문장 리스트화

for i in content_texts :
    if i == '' :
        pass
    else :
        print(i)
    #len(str(i))

 

이렇게 나오는데 여기 중에서도 세 번째에서 잠깐 나오지만 세 번째부터는 한마디로 한글과 관련된 즉 그것만 가져오는 겁니다. 특히 문장으로 되어 있는 것 같은 것을 가져왔고, 그 외에 나머지 ㅋㅋㅋㅋㅋㅋ라고 쓰여져 있습니다. 문장이 있잖아요.글 내부에 이런 것들을 다 생략시키는 거예요. 그걸 다 생략하고 이게 공백이 된 게 있어요. 생략하는 말 그대로 이모티콘이라던지 등등 여러 인터넷 영어로 쓰여져 있는 것들이 있잖아요? 공식적인 한국 문장만 가지고 가는겁니다.

 

import re

content = []

for content_text in content_texts :
    #content_text = re.sub('[|A-Za-z|]+', ' ', content_text)  #영문 제외
    content_text = re.compile('[|ㄱ-ㅎ|ㅏ-ㅣ]+').sub(' ',content_text) # 정규식에서 일치되는 부분을  제외하고 저장
    if content_text == '' :  #빈칸 제외
        pass
    elif content_text == '   ': #빈칸 제외
        pass
    elif content_text == ' ':
        pass
    else :
        content.append(content_text)
print(content)

그리고 여기 밑에 있는 것은요. 맞춤법입니다. 그래서 이 맞춤법 아래에 쓰면 좋은 점은 자동으로 뛰어드는 것 등을 판단해서 이 모든 것을 교정해 줍니다. 아래에 있는 자동으로 띄어쓰기라든지 오탈자 등을 확인하고 쓰시면될것같습니다.

#from hanspell import spell_checker

#result = spell_checker.check(text_3)
#result_check = result.as_dict()
#result_check['checked']

 

 

마지막입니다. 이거 정말 재밌을 수도 있어요. 이게 뭐냐면 네이버 팝과 번역기인데 파카코 번역기를 사용해서 한국어에서 일본어로 그다음에 다시 일본어에서 한국어로 바꾸는 작업을 합니다. 좋은 점이 뭐냐면요, 특히 파파고 번역기 같은 경우는 특히 노인말이나 오탈자라든가 하는 것들이 있어요. 띄어쓰지 않은 것을 자동으로 교정해 줍니다. 그래서 팝과 번역기를 매우 좋아합니다. 특히 한국어에서 일본어 번역을 할 때는 저는 되도록 파파고 번역기를 사용하거든요. 번역기가 너무 좋아서 이 번역기를 사용하면 됩니다.그래서 그렇게 쓰면 돼요 글이 굉장히 정교해진 부분들을 많이 판단할 수 있을 것 같아요. 물론 완벽하게 100%로 교정해주는 것은 아닙니다. 교정도 하려면 네이버 클로버스튜디오라는 게 있어요. 이제 그 서비스가 나와야 하는데 아직 그건 베타 서비스 관련이라 지금은 아직 하고 있지 않습니다. 이걸 한 번 해보고 그냥 저는 테스트를 해봤는데 한 70% 정도는 좋아졌어요.그런데 아직 하나의 효과를 봤을 때는 교정하는 게 506060% 정도일 거고 그 이상은 아직 좀 아니라고 판단하고 있습니다. 그래서 좀 더 지켜봐야 될 것 같은데요. 나중에 다시 좋아졌다 싶으면 좀 더 업그레이드만 할 수 있을 거예요. 오늘은 여기까지입니다.

 

#자료수집
from __future__ import print_function
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import os
from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
from googleapiclient.http import MediaFileUpload
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
import  warnings
from    selenium import webdriver
from    selenium.webdriver.support.ui import WebDriverWait
from    selenium.webdriver.support import expected_conditions as EC
from    selenium.webdriver.common.by import By
from    selenium.webdriver.common.keys import Keys 
from    selenium.webdriver.common.action_chains import ActionChains
from    selenium.common.exceptions import NoSuchElementException,StaleElementReferenceException
from    bs4      import BeautifulSoup as bs
import  time
import  pyperclip
import  requests
import  datetime
import  pymssql
import  pandas as pd
from  pandas.core.frame import DataFrame
import  matplotlib.pyplot as plt
import  chromedriver_autoinstaller
import  subprocess
from    selenium import webdriver
from    selenium.webdriver.chrome.options import Options
from    selenium.webdriver.common.alert import Alert
import  chromedriver_autoinstaller
import  subprocess
import  shutil 
import  xlrd
import  openpyxl 
import  pygsheets
import  csv
import  re
import  webbrowser
import  os
import  sys
import  urllib.request
import  json
from    pandas.io.json import json_normalize
import  hashlib
import  hmac
import  base64
import  numpy as np
import  autoit #autoit는 반드시 autoit 프로그램이 깔려있어야됨
import  pyautogui
from PIL import ImageGrab
try:
    from PIL import Image
except ImportError:
    import Image
import pytesseract
import cv2
import numpy as np
from google_drive_ocr.application import GoogleOCRApplication
import glob


warnings.filterwarnings('ignore')
try:
    shutil.rmtree(r"c:\chrometemp")  #쿠키 / 캐쉬파일 삭제
except FileNotFoundError:
    pass
subprocess.Popen(r'C:\Program Files\Google\Chrome\Application\chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\chrometemp"') # 디버거 크롬 구동
option = Options()
option.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
option.add_argument("--incognito") #추가 (이게 있어야 정상 작동됨, 다만 부분적으로 해결)
option.add_argument("--disable-site-isolation-trials") #추가
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'  #추가
option.add_argument(f'user-agent={user_agent}') #추가

chrome_ver = chromedriver_autoinstaller.get_chrome_version().split('.')[0]
try:
    driver = webdriver.Chrome(f'./{chrome_ver}/chromedriver.exe', options=option)
except:
    chromedriver_autoinstaller.install(True)
    driver = webdriver.Chrome(f'./{chrome_ver}/chromedriver.exe', options=option)

driver.maximize_window() #최대창
action = ActionChains(driver)  #액션지정
time.sleep(1)
driver.implicitly_wait(10)

#네이버 이동

url = 'https://www.naver.com'
driver.get(url)
time.sleep(5)
driver.implicitly_wait(10)

driver.find_element_by_class_name('link_login').click()
time.sleep(1)
driver.implicitly_wait(10)

#id, pw 입력할 곳 찾기

tag_id = driver.find_element_by_name('id')
tag_pw = driver.find_element_by_name('pw')
driver.implicitly_wait(10)

#id 입력

tag_id.click()
pyperclip.copy('ID입력')    
tag_id.send_keys(Keys.CONTROL, 'v')
time.sleep(2)
driver.implicitly_wait(10)

#pw 입력

tag_pw.click()
pyperclip.copy('비밀번호입력')
tag_pw.send_keys(Keys.CONTROL, 'v')
time.sleep(2)
driver.implicitly_wait(10)

#로그인 버튼 클릭

login_btn = driver.find_element_by_id('log.login')
login_btn.click()
time.sleep(1)
driver.implicitly_wait(10)


target_text_ja = []

try:
    url = "https://papago.naver.com/?sk=ko&tk=ja&hn=1" #한일 번역화
    driver.get(url)
    time.sleep(1)
    driver.implicitly_wait(2)
    input_box = driver.find_element_by_css_selector('textarea#txtSource')  #문장 넣을것
    button = driver.find_element_by_css_selector('button#btnTranslate')  #번역 버튼 클릭
    x_button = driver.find_element_by_class_name('btn_text_clse___1Bp8a') #초기화 버튼 클릭
    switch_button = driver.find_element_by_class_name('btn_switch___x4Tcl') #소스/타겟 언어 바꾸기 버튼 클릭
    # text - 리스트에서 하나씩 번역
    for i in content :
        #print('원본글:'+str(i)) #원본
        input_box.clear()
        input_box.send_keys(str(i))  #문장 넣기
        # click translate button
        button.click() 
        time.sleep(4)
        driver.implicitly_wait(10)
        # click switch button
        switch_button.click()
        time.sleep(1)
        driver.implicitly_wait(10)
        
        #번역된 문장글 긁기
        soup = bs(driver.page_source, 'html.parser')
        target_text = driver.find_element_by_css_selector('div#txtTarget').text
        print('번역글:' +str(target_text))
        target_text_ja.append(target_text)
        
        x_button.click() #초기화
        time.sleep(3)
        driver.implicitly_wait(10)
    print('종료')
except Exception as msg:
    error_msg = "번역기 에러:"+str(msg)


driver.close()
driver.quit()
반응형

댓글