카테고리 없음
파이썬으로 원하는 사이트 내용 웹 크롤링 및 번역, 파일까지 만들기
SiriusJ
2024. 10. 3. 20:59
반응형
반응형
최근 해외 사이트들의 동향을 조사하고 본문 내용을 정리하는데 번역을 한번 돌리고 파일화 하는 작업들이 많다보니 이를 파이썬으로 만들면 어떨까해서 아래처럼 만들어 보았습니다.
작업 순서는 아래와 같습니다.
- 1) 원하는 사이트 정적 웹 크롤링(BeautifulSoup)
- 2) Googletranslate 를 활용한 번역
- 3) 번역한 내용을 메모장 파일로 저장
(코드)
import requests, googletrans, time
from bs4 import BeautifulSoup
maxsize = 4500
sleep_time = 2
translator = googletrans.Translator()
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
url = input("번역할 웹 페이지의 URL을 입력하세요: ")
data = requests.get(url, headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
# 글 제목 추출
title = soup.select('.metadata-content-area')
for index, element in enumerate(title, 1):
f = open('C:/Users/USER/PycharmProjects/global_iot_security/test.txt', 'w', encoding='UTF-8')
trans_title = translator.translate(element.text.strip(), src = 'en', dest='ko')
f.write("{} 번째 게시글의 제목: {}".format(index, trans_title.text))
f.close()
# 세부내용 추출
full_contents = soup.select('.doc-content-area')
for i in full_contents:
txt_contents = i.get_text()
f = open("C:/Users/USER/PycharmProjects/global_iot_security/test.txt", "a", encoding='UTF-8')
#txt_contents가 maxsize 보다 클 때(5000자 이상이면 오류 발생, 4500자씩 분해하여 번역)
if len(txt_contents) > maxsize:
results_list = []
concatenated_result = ""
original_contents = [txt_contents[i:i + maxsize] for i in range(0, len(txt_contents), maxsize)]
for i in original_contents:
r = translator.translate(i.strip(), dest='ko', src='en')
time.sleep(sleep_time)
results_list.append(r.text)
f.write(r.text.strip())
for i in results_list:
concatenated_result += i
# 전체 내용이 4500자 이하라면, 그대로 본문 전체를 번역하여 파일로 씀
else:
res = translator.translate(txt_contents.strip(), dest='ko', src='en')
time.sleep(sleep_time)
f.write(res.text.strip())
f.close()
* 단 주의할 점은, 코드에서 번역시에 5천자가 넘게되면 번역 오류가 발생하게 됩니다.
따라서 저는 우선 전체 크롤링 할 내용이 4500자를 기준으로 넘는지 안넘는지를 비교하여 경우에 따른 케이스로 만들어보았습니다.
beautifulsoup를 활용해서 정적 크롤링을 했는데, 1시간정도에 급하게 만드느라 세밀한 코딩결과는 아닙니다.
이유는?
4500자를 넘길때, 해당 구간에서는 번역이 꼬일 수 있기 때문입니다.
일차적으로 만들어보았고, 추가적으로 보완하려고 합니다.
반응형