본문 바로가기
방구석코딩/주식 크롤링 분석

[파이썬] 주식 크롤링 매크로화(1) - 함수정의 및 사전작업

by 석세상 2024. 7. 23.
반응형

앞에서 네이버 증권 크롤링 하는 방법에 대해서 사전준비사항부터 크롤링한 자료를 파일로 저장하는 것까지 끝까지 한바퀴 돌아가는 방법을 배웠다. 그러면 나머지 부분을 어떻게 쉽게 실행할 수 있는지 알아보자.

다른 인터넷 자료를 찾아보면 단지 기술적으로 코드를 어떻게 실행할지에 대한 얘기들이 대부분이다. 하지만 실제로 코딩을 위해서는 그림을 어떻게 그려야 하는지부터 아는게 순서다. 

 

이 부분이 선행되지 않는다면 기껏해야 인터넷 찾아보고 코드 따오고 시키는 코드만 작성하는 것밖에 되지 않는다. 코드를 몰라도 이 부분은 이렇게 변경하면 되겠는데? 여기선 이렇게 하면 되겠구나 라는 생각을 가지는 연습이 훨씬 중요하다. 

728x90

명령어나 패키지, 기능적인 부분을 암기해서 시험볼게 아니라면 저런 내용들이 정리되고 나면 기술적인 부분과 명령어는 인터넷에서 찾아서 하면 된다. 물론 암기하고 있으면 찾아볼 시간을 단축할 수 있으니 나쁘다는게 아니다.

 

하지만 어떤 명령어를 알고 있어도 이 부분의 문제를 어떻게 해결해야 하는지 어떻게 데이터를 변경하면 될 것 같은지 생각조차 못하면 명령어를 아무리 많이 암기하고 있다고 해도 무용지물이기 때문이다.

 

1. 코드 분석하기

먼저 우리가 앞에서 생성한 코드를 어떤 부분을 함수를 정의를 통해 만들 것인지 결정하고 실행하는 순서는 어떻게 해야 하는지 구상해야 한다.

 

그러면 리마인드를 위해 앞의 코드가 어떻게 실행되었는지 파악해보자. 아래 링크를 참조하여 기억을 되새겨보면 좋다.

 

[파이썬] 주식 데이터 크롤링(8) - 전체 코드 및 향후 해결사항

앞에서 파이썬을 이용하여 주식 데이터를 크롤링하기 위해서 단계적으로 진행했는데, 이제 한 사이클을 실행할 수 있는 코드를 작성했다. 차근차근 앞의 해결책들을 따라해봤다면 아래 코드는

gusugi.tistory.com

 

위의 코드에서 주석을 살펴보면 각 번호별로 총 4단계로 구분하여 작성했으며 패키지를 실행하는 앞부분까지 포함한다면 총 5가지로 나눠볼 수 있다.

 

0) 패키지 불러오기, 1) 페이지 정보 및 브라우저 실행, 2) 기본 체크박스 해제, 3) 원하는 체크박스 선택 및 적용, 4) 파이썬으로 데이터 가져오기 및 csv 파일로 저장 이렇게 나눠진다.

 

그러면 어느부분을 어떻게 반복할지 생각해보자.

 

2. 함수정의를 위해 고려할 점

함수정의란 좀 더 풀어서 써보자면 사용자 함수정의라고 쓸 수 있다. 누군가 만들어둔 코드를 패키지로 불러온 것처럼 우리가 반복해서 사용해야할 코드 부분을 내가 함수 정의를 만들어서 필요한 부분에 코드 단락을 정의된 함수명으로 간단하게 쓰고 실행할 수 있다.

 

근데 코드를 한번 돌아가게 만들었는데 굳이 시간을 투자해서 사용자 함수정의를 할 필요가 있을까?라는 생각이 들수도 있다. 이 부분은 만든 코드를 어떻게 사용할지에 따라 대답이 달라질 수 있다.

 

한번 사용하고 말거라면 굳이 시간을 투자하여 만들 필요가 없다. 하지만 계속해서 동일한 코드를 오랫동안 반복하여 사용하고, 해당 코드를 효율적으로 관리하기 위해서는 함수정의가 필요하다.

 

계속 사용하는 코드라면 실행할때마다 매번 여러번 시간을 투자해서 작업할 것이가, 아니면 한번 고생하면서 시간을 투자해서 향후에 편하게 작업할 것인가.

 

0) 패키지 불러오기

패키지를 불러오는 부분은 처음 한번만 실행하면 되기 때문에 함수 정의를 할 필요가 없다. 다만 기존에 패키지 외에 함수정의와 그 외 추가로 필요한 몇가지 패키지가 기존에 사용한 패키지 외에 아래 2가지 패키지를 추가하였다.

import gc                                        # 메모리에서 삭제하는 모듈

import os                                        # 파일 저장 여부를 확인하는 모듈
import datetime                                  # 날짜 및 시간을 사용하기 위한 모듈

 

먼저 gc 패키지의 경우 메모리를 정리하는 패키지이다. 파이썬에서 생성된 것들은 메모리를 사용하는데 이때 찌꺼기가 생겨 사용한 메모리보다 더 많은 메모리를 잡아먹는 경우가 있다. 이렇게 낭비되는 메모리를 효율적으로 활용하기 위해 사용된다.

 

참고로 여기서 메모리는 pc에 있는 메모리를 뜻한다. 주로 컴퓨터에서 저장공간은 하드 디스크나 SSD의 크기를 뜻하며 메모리는 램이라는 장치의 크기를 의미한다.

 

두번째 패키지는 datetime인데 시간을 제어하는 패키지이다. 이 패키지를 사용하는 이유는 파일로 저장 시 기존에는 하나의 파일에 계속 누적하여 데이터를 저장했지만 이 경우 중간에 문제가 생기면 누적된 데이터에 문제가 발생할 수 있다.

 

이런 문제점을 방지하기 위해 날짜별로 데이터를 저장하기 위해서이다.

 

1) 페이지 정보 및 브라우저 실행

이 부분은 페이지 정보와 브라우저는 한번만 실행하면 되기 때문에 딱히 함수정의를 해서 반복하여 사용할 필요는 없다. 하지만 함수정의를 이용하여 실행하기 위해 작업 순서와 약간의 변경을 필요하다.

 

자세한 내용은 추후 내용을 보면서 설명하도록 하겠다.

 

2) 기본 체크박스 해제

기본 체크박스 해제 부분은 네이버 증권에서는 6개까지 체크박스 선택을 허용하기 때문에 6개 정보를 모두 획득했으면 다음 정보를 획득하기 위해 반복이 필요한 부분이다. 따라서 함수정의의 필요성이 있는 부분이다.

 

3) 원하는 체크박스 선택 및 적용

체크박스 선택 및 적용 부분도 첫번째 실행에서 선택한 체크박스의 정보를 모두 가져오면 그 다음 정보를 가져오기 위해 원하는 체크박스 정보를 다시 선택하고 적용할 필요가 있는 부분이다. 그렇기 때문에 이 부분도 반복작업이 요구되므로 함수정의가 필요하다.

 

다만 이 부분은 선택되는 정보가 달라져야 하기 때문에 기존 코드의 일부 수정이 필요한 부분이다.

 

4) 파이썬으로 데이터 가져오기 및 csv 파일로 저장

데이터 가져오기 및 파일로 저장하는 부분은 기존 코드를 보면 코스피 종목 정보가 총 45페이지로 되어 있는데 매 페이지 정보를 한 페이지 씩 실행 후 파일에 누적하여 저장한다. 

 

함수정의를 통해 실행하기 위해서는 여기서 조금 많은 변화가 생기는데 일단 일별로 데이터를 생성하기 위한 부분이 필요하고, 또 하나는 기존의 누적방식에서는 행단위로 누적이 된다는 것이다.

 

그러면 네이버 증권의 체크항목이 변경되었을 때 정보를 가져오면 열 단위로 결합하여 데이터를 가져와야 하는데 행 단위로 다음 체크항목 정보를 누적한다면 문제가 발생된다. 그렇기 때문에 이 부분은 반복 작업도 필요하고, 열단위의 정보가 생성되었을 때 결합할 수 있는 코드가 필요하다.

 

 

3. 함수정의 및 실행순서 정하기

앞에서 함수정의할 부분을 정리했다면 실제로 함수정의를 위해 코드를 어떻게 변경할지의 부분과 이렇게 만든 함수정의 부분을 어떤 순서로 실행하고 또 함수정의 실행 사이에 어떤 코드를 변경 또는 추가해야 하는지 실행 순서를 정해야 한다.

 

그럼 앞의 내용과 추가 및 변경할 부분을 실제로 코드를 변경하기 전에 그려봐야 한다. 완벽하게 구상하지는 않아도 최대한 코드를 손보기 전에 잘 구상하지 않고 코드를 먼저 손보게 되면 문제점이 발생하는 부분이 훨씬 많아져 변경을 위해 더 많은 시간이 소요된다.

 

먼저 패키지를 불러오는 1) import 부분을 실행하고, 2) 웹 브라우저를 실행및 원하는 페이지로 이동해야 한다. 여기까지는 큰 차이가 없지만 원하는 페이지 이동하는 주소가 코스피와 코스닥 모두를 가져오려면 3) 페이지 주소를 변경할 수 있도록 작업이 필요하다.

 

다음으로 4) 체크박스 해제를 실행한다. 체크박스 해제는 어차피 해제만 하기 때문에 기존 코드를 반복할 수 있으면 된다.

 

다음은 5) 체크박스 선택할 6개 항목 부분은 함수정의 부분에서 제외한다. 왜냐하면 이 부분은 반복되는 부분이 아니고 그 다음 선택할 항목들, 또 다음 선택할 항목들로 변경해야 하기 때문이다.

 

그리고나서 6) 체크박스 선택 및  적용하는 부분만 함수정의한다. 

 

마지막으로 가장 중요한 부분이라고 할 수 있는 7) 파이썬으로 데이터 가져오기 및 파일 저장하는 부분이다. 내 경우는 데이터를 일자별로 가져오고 싶기 때문에 누적하여 파일로 저장하는 부분도 수정이 필요하고, 또 앞에서 체크박스에서 선택항목이 달라질 때마다 다른 파일 이름으로 저장하는 것도 필요하기 때문에 많은 코드 수정이 필요한 부분이다.

 

이렇게 먼저 작업 순서와 수정할 내용을 미리 한번 그려보는 것이 중요하다. 물론 이렇게 생각하는 것과 실제로 코드를 작성해보면 다른 부분도 많이 있겠지만 미리 생각하지 않고 코드부터 수정한다면 작업의 방향을 잡지 못하는 경우가 발생할 수도 있다.

 

다음 부분에서는 실제로 함수정의를 위한 코드 수정 부분을 보도록 하겠다.

728x90
반응형

댓글