1. 개발과정에서 발생한 문제점
이전 포스팅에서 설계했던 방식대로 구현해보니 수행시간이 엄청나게 오래 걸렸습니다...
스스로 문제점을 파악을 해보니, 다음과 같은 문제점이 있었고 성능을 높이기 위해 고민했습니다.
한 문장씩 번역을 할 때 웹드라이버가 새롭게 웹페이지를 띄우는 과정에서 오랜 시간이 소요된다.
-> 새롭게 웹페이지를 띄우지 않고, 처음에 띄운 페이지를 그대로 사용해보자
-> 입력창에 써있는 기존 데이터를 삭제하고 새로운 데이터를 넣는다.
공교롭게도 구글 번역, 파파고 번역 웹페이지 모두 입력창의 'X'버튼을 클릭하면 입력창이 초기화되었습니다.
그래서 셀레니움에서 해당 버튼을 클릭하도록 추가한 코드는 다음과 같습니다.
# 파파고 번역초기화
close = driver.find_element_by_css_selector("button.btn_text_clse___1Bp8a ")
close.click()
또한 처음에 띄운 웹페이지의 로딩 속도가 느린 경우에 대비하여 접속하자마자 입력창에 원문을 집어넣지 않았습니다.
기존의 프로세스는 1. 엑셀에서 원문 불러오기 2. 페이지 접속 이었다면,
수정된 프로세스는 1. 페이지 접속 2. 엑셀에서 원문 불러오기 입니다.
이렇게 함으로써 페이지 접속시간 동안 엑셀에서 원문을 불러올 수 있게 되어 시간을 효율적으로 활용할 수 있다고 생각했습니다.
그리고 구글, 파파고 번역 모두 웹페이지에 번역 버튼을 클릭하지 않아도 자동으로 번역결과가 출력됩니다.
그래서 기존에 번역 버튼을 클릭하는 코드는 불필요하다고 생각되어 주석 처리 하였습니다.
결과적으로 처음에 구현한 코드보다 약 5배 더 나은 성능을 갖게 되었습니다.
2. 프로그램 구현
앞에서 설명했던 프로그램을 다음과 같은 코드로 구현했습니다.
우선 파파고 번역 데이터 구축 프로그램입니다.
from openpyxl import load_workbook
from selenium import webdriver
import time
driver = webdriver.Chrome("./chromedriver")
# 파파고 페이지 접속
driver.get("https://papago.naver.com/?sk=ko&tk=zh-CN")
# 페이지 접속 후 시간 지연
time.sleep(0.5)
for i in range(2,372):
load_wb = load_workbook("/Users/User/Desktop/20200723-1차내부평가-한중동시통역-plain2 (1).xlsx", data_only=True)
load_ws = load_wb['20200723-1차내부평가-한중동시통역']
input = load_ws.cell(i, 4).value
# 입력창에 검색어 입력
input_box = driver.find_element_by_css_selector("textarea#txtSource")
input_box.send_keys(input)
# 번역 버튼 클릭
#button = driver.find_element_by_css_selector("button#btnTranslate")
#button.click()
# 버튼 클릭 후 시간 지연 & 검색결과 저장
time.sleep(5)
result = driver.find_element_by_css_selector("div#txtTarget").text
load_ws.cell(i, 5, result)
# 번역초기화
close = driver.find_element_by_css_selector("button.btn_text_clse___1Bp8a ")
close.click()
load_wb.save("/Users/User/Desktop/20200723-1차내부평가-한중동시통역-plain2 (1).xlsx")
이어서 구글 번역 데이터 구축 프로그램입니다.
from openpyxl import load_workbook
from selenium import webdriver
import time
driver = webdriver.Chrome("./chromedriver")
# 구글번역 페이지 접속
driver.get("https://translate.google.co.kr/?hl=ko#view=home&op=translate&sl=ko&tl=zh-CN")
# 페이지 접속 후 시간 지연
time.sleep(0.5)
for i in range(2,372):
load_wb = load_workbook("/Users/User/Desktop/20200723-1차내부평가-한중동시통역-uservocab2 (1).xlsx", data_only=True)
load_ws = load_wb['20200723-1차내부평가-한중동시통역']
input = load_ws.cell(i, 4).value
# 입력창에 검색어 입력
input_box = driver.find_element_by_css_selector("textarea#source")
input_box.send_keys(input)
# 번역 버튼 클릭
#button = driver.find_element_by_css_selector("button#btnTranslate")
#button.click()
# 버튼 클릭 후 시간 지연 & 검색결과 저장
time.sleep(3.5)
result = driver.find_element_by_css_selector("div.result-shield-container").text
load_ws.cell(i, 12, result)
# 번역초기화
close = driver.find_element_by_css_selector("div.clear.jfk-button-flat.tlid-clear-source-text.jfk-button")
close.click()
load_wb.save("/Users/User/Desktop/20200723-1차내부평가-한중동시통역-uservocab2 (1).xlsx")
3. 추후 개선되어야 하는 부분
성능이 이전보다는 개선되었지만 하나씩 번역문을 가져오기 때문에 수행속도가 느립니다ㅠㅠ
pathos multiprocess을 사용해서 브라우저를 여러개 띄우면서 크롤링을 병렬로 처리하면 수행속도가 훨씬 빨라질 것 같습니다.
도전을 해보았으나 멀티프로세싱을 구현하는 부분에 있어서 공부가 부족하여 그 부분은 아직 개선하지 못했습니다.
셀레니움으로 멀티 프로세싱을 구현하는 방법에 대해 더 공부한 이후에 프로그램의 성능을 개선해봐야 할 것 같습니다.
'Work Experience > ETRI Intern' 카테고리의 다른 글
너무 바쁜 이번주, 자동통역기 성능 평가 (0) | 2020.08.05 |
---|---|
번역 데이터 구축 프로그램: 지루한 업무를 자동화시킬 수 있다면? (0) | 2020.07.29 |
인턴 일지를 시작하며, (0) | 2020.07.29 |