DL/NLP

[NLP] Selenium 파일 다운로드 경로 설정

moonzoo 2024. 3. 6. 15:58

 

1. 개요

자동화된 크롤링 툴을 만들면서 여러 사이트에 적용되는 범용적인 툴을 개발하고자 했습니다.

 

그러나, 사이트마다 HTML 구조가 모두 다르기 때문에 자동화가 아닌 반자동 방법을 채택하여 직접 웹 페이지에서 PDF 파일을 클릭하면 어떠한 메시지도 없이 자동으로 지정한 경로로 저장되도록 세팅했습니다.

 

chrome_options = Options()
chrome_options.add_argument("--no-sandbox")  # 샌드박스 모드 비활성화
chrome_options.add_argument("--disable-dev-shm-usage")  # /dev/shm 사용 비활성화
chrome_options.add_argument("--disable-gpu")  # GPU 가속 비활성화
        
        
download_path = rf"C:\MZ\DB\{DB_NAME}\pdf_folder"
        
    

prefs = {
# 절대 경로를 사용하여 다운로드 경로 지정
	"download.default_directory": download_path,
	"download.prompt_for_download": False,
	"plugins.always_open_pdf_externally": True  # PDF 파일 자동 다운로드
}

chrome_options.add_experimental_option("prefs", prefs)

driver = webdriver.Chrome(options=chrome_options)
        
# WebDriver 객체 생성
driver.get(url)

 

셀레늄(Selenium)을 사용하여 웹 자동화 스크립트를 작성할 때, 특정 파일들을 자동으로 다운로드하는 작업이 필요한 경우가 있습니다. 이때, 브라우저의 기본 다운로드 경로 대신 사용자가 지정한 특정 경로에 파일을 다운로드하고자 할 때 사용자 정의 다운로드 경로를 설정합니다. 위 코드에서 chrome_options와 prefs를 설정하는 부분은 바로 이러한 사용자 정의 다운로드 경로 설정과 관련된 작업을 수행합니다.

 

다운로드 경로를 사용자가 지정해주는 이유는 다음과 같습니다:

1. 파일 관리 용이성

  • 다운로드 받은 파일들을 특정 프로젝트나 목적에 맞게 정리된 폴더에 바로 저장함으로써 파일 관리가 용이해집니다. 예를 들어, 특정 은행의 PDF 문서를 다운로드하는 경우, 해당 은행 이름으로 된 폴더에 바로 문서를 저장하여, 나중에 파일을 찾거나 분류할 때 편리합니다.

2. 자동화 과정의 효율성

  • 사용자가 직접 다운로드 경로를 지정함으로써, 다운로드한 파일을 스크립트의 다음 단계에서 바로 사용할 수 있습니다. 예를 들어, 다운로드한 PDF 파일을 바로 읽어서 데이터를 추출하는 등의 작업이 가능해집니다. 이는 전체 자동화 과정을 보다 효율적으로 만들어 줍니다.

3. 사용자 인터페이스 간섭 최소화

  • 셀레늄을 사용한 웹 자동화 작업 중 파일 다운로드 시, 브라우저의 기본 동작은 사용자에게 저장 위치를 묻는 대화상자를 표시하는 것입니다. 이 옵션을 비활성화하고 파일을 자동으로 특정 경로에 저장함으로써, 스크립트 실행 중 사용자 인터페이스의 간섭을 최소화할 수 있습니다.

4. 환경변수와의 독립성

  • 다양한 시스템이나 환경에서 스크립트를 실행할 경우, 각 시스템의 기본 다운로드 경로 설정이 다를 수 있습니다. 사용자가 직접 다운로드 경로를 지정함으로써, 스크립트가 다양한 환경에서도 일관된 동작을 보장받을 수 있습니다.

위 코드에서 사용된 chrome_options.add_argument 메서드들은 셀레늄이 크롬 브라우저를 제어할 때 필요한 여러 가지 환경 설정을 지정합니다. 이러한 설정들은 파일 다운로드와 직접적인 관련은 없지만, 특히 서버나 Docker 컨테이너 같은 특정 환경에서 셀레늄 스크립트를 실행할 때 필요한 성능 최적화 및 호환성 설정들입니다.

 

2. 마치며

사실 자동화된 툴을 만드는 것이 비용을 최소화할 수 있지만 모델 학습을 위한 데이터는 정확해야 합니다.

 

Garbage in, garbage out이라는 말이 있습니다. "쓰레기가 들어가면 쓰레기가 나온다"는 뜻으로 터무니없는 입력 데이터(쓰레기가 들어감)라도 의심을 품지 않고 처리하며, 생각하지도 않던 터무니없는 출력을(쓰레기가 나옴)을 만들어낸다는 것입니다.

 

그렇기 때문에 반자동화된 툴을 개발하여 범용적인 웹사이트 데이터 수집에 사용하고 있습니다.

 

(물론 크롤링을 진행하기전 robots.txt를 확인해보고 진행하는 것이 좋습니다.)