매일 상한가 및 천만주 이상 거래량 기록한 종목을 분석하기 위해서 일단 해당 종목을 자동으로 크롤링하는 파이썬 코드 작성 시작했습니다. 데이터프레임으로 가져오는 것까지했고 데이터프레임을 정리하고 엑셀 파일에 일자별로 저장하는 것까지는 내일 완성해 보려고 합니다.
오늘은 만든 전체 코드는 아래와 같습니다.
from bs4 import BeautifulSoup
import pandas as pd
#상한가 종목
url_upper = 'https://finance.naver.com/sise/sise_upper.naver'
res_upper = requests.get(url_upper)
soup_upper = BeautifulSoup(res_upper.content, 'html.parser', from_encoding='cp949')
#한글이 깨져서 뒤에 from_encoding='cp949' 추가함
table_upper = soup_upper.find_all('table')
df_upper = pd.read_html(str(table_upper)) #str()을 안 붙이면 변수명을 html 언어로 인식
#거래량 상위 종목 (코스피)
url_quant1 = 'https://finance.naver.com/sise/sise_quant.naver?sosok=0'
res_quant1 = requests.get(url_quant1)
soup_quant1 = BeautifulSoup(res_quant1.content, 'html.parser', from_encoding='cp949')
table_quant1 = soup_quant1.find_all('table')
df_quant1 = pd.read_html(str(table_quant1))
df_quant1 = df_quant1[1].dropna()
#거래량 상위 종목 (코스닥)
url_quant2 = 'https://finance.naver.com/sise/sise_quant.naver?sosok=1'
res_quant2 = requests.get(url_quant2)
soup_quant2 = BeautifulSoup(res_quant2.content, 'html.parser', from_encoding='cp949')
table_quant2 = soup_quant2.find_all('table')
df_quant2 = pd.read_html(str(table_quant2))
df_quant2 = df_quant2[1].dropna()
한동안 코팅을 안한데다가 새로운 PC에 비주얼 스튜디오 설치부터 주피터 노트북까지 다 설치하느라 한세월이 걸렸네요. 새로운 PC에서 크롤링해온 html의 한글이 다 깨져버려서 해결하는데 한 시간은 쓴 것 같습니다. 인터넷의 수많은 솔루션을 시도해봤는데 다 소용없고, 결국 파싱할 때 뒤에 from_endocing='cp949'
이거 하나 추가하니 해결됐습니다. 근본 원인은 아직 못 찾겠네요. 혹시 비슷한 문제가 있으신 분들은 참조하세요.
상한가 종목을 데이터 프레임으로 가져오면 세 개의 table이 딸려오는데 아래와 같습니다.
- 첫번째 테이블은 선택 영역
- 두번째 테이블은 코스피 상한가 종목
- 세번째 테이블은 코스닥 상한가 종목
아래 네이버 상한가 종목 화면의 위에서 아래로 테이블을 하나씩 가져오는거죠.
이렇게 해서 두번째와 세번째 2차원 프레임을 보면 각 종목 정보는 일단 잘 따라온걸 확인할 수 있네요.
데이터가 없는 부분은 정리가 필요할 것 같구요.
비슷한 방법으로 거래량 상위 종목을 크롤링했는데 코스피와 코스닥이 한 페이지에 동시에 뜨지 않습니다. 그래서 각각의 코스피와 코스닥을 선택했을 때 각각의 url을 확인해보니 https://finance.naver.com/sise/sise_quant.naver
여기까지는 동일하고 뒤에 ?sosok=0
와 ?sosok=1
이 각각 코스피와 코스닥에 해당하는 화면으로 연결되는 걸 알 수 있습니다.
따라서 각각을 크롤링해서 데이터 프레임을 만들었습니다. 상한가 종목은 column값이 아예 비어있는 열이 있어서 cliping하려고 했는데 기억이 잘 안나서 내일 책 뒤져보고 해야할 것 같습니다. 거래량 상위 종목은 dropna()
함수로 값이 비어있는 열을 날렸는데 일부 종목 중에서 필드값이 비어있는 종목도 같이 날라간거 같아서 이것도 해결해야 할 것같구요. 오늘까지의 거래량 상위 종목 데이터 프레임은 아래와 같은 형태입니다.
오늘 처음으로 마크다운으로 포스팅 작성하고 있는데 좀 어색하네요. 이게 중국이라 인터넷이 느려서 그런지 이미지도 마크다운으로 바로 첨부가 잘 안되서 일단 마크다운으로 작성한 후에 이미지 첨부해야 할 것 같습니다.
# 앞으로 할 일
- 데이터 프레임 정리 (필요없는 열과 행 삭제, 거래량 천만주 이상 기준 종목 정리)
- 코드 실행시 일자별로 excel 파일 정리되도록
- 해당 종목 - 종목 코드 연결 - 종목 관련 기본 정보 크롤링까지 연결
그럼 오늘은 이만!
'coding' 카테고리의 다른 글
상한가 및 천만주 이상 주식 정리 코딩 2일차 (0) | 2022.12.04 |
---|