본문으로 건너뛰기
실습하기

Selenium 추출한 데이터를 CSV 파일로 저장하기

지난 두 수업에서는 Selenium을 활용해 Yahoo Finance 웹 페이지에 접속하고, 시장 데이터와 주식 정보를 추출하는 방법을 배웠습니다.

이번 수업에서는 추출한 데이터를 CSV 파일로 출력하고 저장하는 방법을 알아보겠습니다.


CSV 파일 저장 코드

아래의 코드는 파일 시스템을 사용하지 않고 메모리 내에서 CSV 데이터를 처리하기 위해 io.StringIOcsv 모듈을 사용한 코드입니다.

코드 예시
# CSV 데이터를 생성할 메모리 버퍼 생성
output = io.StringIO()

# csv.writer 객체 생성 (기본적으로 쉼표로 구분)
csv_writer = csv.writer(output)

# 세로로 배치된 CSV 데이터 작성
csv_writer.writerow(["Metric", "Value"])
csv_writer.writerow(["Current Price", current_price])
csv_writer.writerow(["Previous Close", previous_close])
csv_writer.writerow(["Volume", volume])

# CSV 데이터를 문자열로 변환
csv_data = output.getvalue()

# 메모리 버퍼 닫기
output.close()

각 줄을 단계별로 살펴보겠습니다.

1. output = io.StringIO()

  • io.StringIO()는 파이썬의 io 모듈에서 제공하는 클래스입니다.

  • 이 클래스는 메모리 내에서 파일과 유사하게 동작하는 객체를 생성합니다.

  • 보통 CSV 파일을 생성할 때는 파일 시스템에 저장하지만, 이 경우 파일을 사용하지 않고 메모리 내에서 문자열을 다루기 위해 StringIO()를 사용합니다.

  • 여기서 output은 일종의 "메모리 버퍼"로, 우리가 작성할 CSV 데이터를 일시적으로 저장할 공간입니다.


2. csv_writer = csv.writer(output)

  • csv.writer()는 파이썬 csv 모듈에서 제공하는 클래스입니다.

  • csv.writer(output)output이라는 StringIO 객체를 CSV 작성 객체로 변환해줍니다.

  • csv_writer 객체는 CSV 데이터를 작성하는 기능을 제공합니다. 기본적으로 쉼표(,)를 사용하여 데이터를 구분합니다.

  • 이제 csv_writer는 데이터를 CSV 형식으로 기록할 수 있게 됩니다.


3. csv_writer.writerow(["Metric", "Value"])

  • csv_writer.writerow()는 CSV의 한 행을 작성하는 함수입니다.

  • 이 줄에서는 첫 번째 행을 작성하는데, "Metric""Value"라는 두 개의 항목을 작성합니다.

  • ["Metric", "Value"]: 이 리스트는 각각의 열(column) 이름을 나타냅니다.

    • "Metric": 데이터 항목의 이름 (예: Current Price, Previous Close, Volume)
    • "Value": 해당 항목의 값 (예: 5619.58, 5626.02, 895731735)
  • 이 행은 CSV 파일의 첫 번째 줄, 즉 헤더 행이 됩니다.


4. csv_writer.writerow(["Current Price", current_price])

  • csv_writer.writerow()를 다시 호출하여 두 번째 행을 작성합니다.

  • 이 줄에서는 "Current Price"라는 항목의 값으로 current_price 변수를 기록합니다.

  • ["Current Price", current_price]: 리스트의 첫 번째 항목은 "Current Price"라는 열 이름, 두 번째 항목은 current_price에 저장된 실제 값입니다.

  • 이 행은 현재 주가 데이터를 포함하는 CSV의 두 번째 줄이 됩니다.


5. csv_writer.writerow(["Previous Close", previous_close])

  • 세 번째 행으로, "Previous Close" 항목과 그 값인 previous_close 데이터를 CSV에 작성합니다.

  • ["Previous Close", previous_close]: "Previous Close"는 항목 이름, previous_close는 그 값입니다.


6. csv_writer.writerow(["Volume", volume])

  • 네 번째 행으로, "Volume" 항목과 그 값인 volume 데이터를 작성합니다.

  • ["Volume", volume]: "Volume"은 항목 이름, volume은 그 값입니다.


7. csv_data = output.getvalue()

  • output.getvalue(): 메모리 버퍼에 저장된 모든 데이터를 문자열로 변환하는 메서드입니다.

  • StringIO 객체인 output에 작성된 CSV 데이터를 메모리에서 문자열로 가져옵니다.

  • 이때 csv_data는 문자열 형식의 CSV 데이터가 저장된 변수가 됩니다.


8. output.close()

  • output.close(): 더 이상 메모리 버퍼를 사용하지 않기 때문에 StringIO 객체를 닫습니다.

  • 메모리 자원을 해제하는 과정이며, output 객체는 더 이상 사용할 수 없습니다.


지금까지 수업에서는 Selenium으로 주식 데이터 가공하고, CSV 파일로 저장하는 방법을 배웠습니다.

다음 수업에서는 고객별 월별 매출 데이터를 파이썬으로 분석하고, 맞춤형 보고서를 이메일로 자동 발송하는 방법을 살펴보겠습니다.

다음 내용이 궁금하다면?

코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!