화장품마다 광고 키워드를 가져오기 위해 광고 사진에서 텍스트를 추출했다
과정
tesseract를 사용했다가 영어는 괜찮은데 한글이 너무 추출이 안 되고 깨졌다.
우린 한국에서의 마케팅 분석이기 때문에 영어보다 한글이 중요한 만큼 tesseract를 포기하고
다른 방법을 찾아봤다.
다음으로는 구글의 cloud vision api를 사용해봤다.
한글도 문제없이 잘 추출됐다. 하지만 안되는 이미지들이 엄청 많았다. 찾아보니까 다른 사람들도
겪고 있는 문제였지만 해결됐다는 말이 없었다.
그래서 다음으로는 이미지 추출 사이트에서 동적으로 돌리고 추출된 텍스트를 가져오는 코드로 바꿨다.
이 방법은 사실상 완성된 다른 사이트를 이용하는거여서
대부분 문제없이 돌아갔지만 용량이 큰 몇몇 gif들은 프리미엄을 사라고 나왔다.
안 되는 gif들만 확인해보니까 중요한 텍스트가 따로 없어서 안 되는 것들은 버렸다.
이번에는 최종 방법에 대해서만 올리겠다.
저장했던 데이터 불러오기
저장해놓은 데이터 불러오기
# CSV 파일 읽기
img_df = pd.read_csv('..//올리브영 제품 링크//oliveyoung_img_link.csv')
# 이미지 링크 열 이름 수정 ('img_link'로 가정)
image_links1 = img_df['img_link'].tolist()
# URL 확인 및 정리 - 리스트 요소를 문자열로 변환
image_links2 = [url.strip("[]") for url in image_links1 if isinstance(url, str)]
image_links2 = [url.replace("\'","") for url in image_links2 if isinstance(url, str)]
links=[[] for i in range(len(image_links2))]
for i in range(len(image_links2)):
for j in image_links2[i].split(','):
j=j.strip()
links[i].append(j)
사이트 추출해서 최종으로 저장하는 코드
def text_get(x,y):
# if links[x][y][-3:]=='gif':
# return
driver.get(links[x][y])
links[x][y]=driver.current_url
driver.back()
driver.find_element(By.CLASS_NAME, 'enterUrl ').click()
driver.execute_script("window.scrollTo(0,500)")
time.sleep(0.5)
try:
driver.find_element(By.CSS_SELECTOR, "#uploadfile > div > div.col-xl-9 > div.col-12.image_back.toolColor.text-center.m-0-auto.d-block.br_10.p-3 > div > div.col-12.urlArea.d_none.mt-3 > div > input").send_keys(links[x][y])
driver.find_element(By.CLASS_NAME, 'urlBtn ').click()
driver.execute_script("window.scrollTo(0,800)")
time.sleep(1)
clickable_element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CLASS_NAME, 'convertFiles'))
)
time.sleep(10)
clickable_element.click()
# driver.find_element(By.CLASS_NAME, 'convertFiles').click()
driver.execute_script("window.scrollTo(0,700)")
#가능해질 때까지 기다리기
clickable_element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CLASS_NAME, 'copyData'))
)
time.sleep(25)
clickable_element.click()
driver.execute_script("window.open('{}')".format('https://n.lrl.kr/'))
driver.switch_to.window(driver.window_handles[1])
# driver.find_element(By.CLASS_NAME, 'copyData').click()
time.sleep(1)
a=driver.find_element(By.CLASS_NAME, 'note-editable')
a.click()
a.send_keys(Keys.CONTROL, 'v')
time.sleep(1)
html=driver.page_source
soup=BS(html,'html.parser')
result=soup.find("div",attrs={"class":"note-editable"})
if result.text!='':
if len(text[x])>=y:
text[x][y]=result.text
else:
text[x].append(result.text)
except Exception as e:
print(str(x)+"-"+str(y))
print(e)
finally:
driver.close()
time.sleep(1)
driver.switch_to.window(driver.window_handles[0])
driver.execute_script("window.scrollTo(0,1200)")
time.sleep(1)
driver.find_element(By.CLASS_NAME, 're_convert').click()
driver = webdriver.Chrome()
driver.get('https://www.cardscanner.co/ko/image-to-text')
for i in re_index:
text_get(int(i.split("-")[0]),int(i.split("-")[1]))
raw_data = pd.DataFrame()
raw_data['text'] = plus_text
raw_data.to_csv("oliveyoung_text.csv")