본문 바로가기

전체 글

(50)
국내 주식 재무제표 크롤링하기_1 네이버 증권 사이트에서도 재무제표 정보를 제공하기는 하지만 동적 페이지라서 셀레니움을 사용해야 합니다. 셀레니움의 단점은 느리다는 것이 단점입니다. 네이버 증권 사이트 대신에 CompanyGuide 사이트를 이용하겠습니다. 여기서 재무제표를 클릭해주세요. 그리고 사실 해당 페이지 url 주소에서 ~gicode=A005930 뒤에 부분은 필요없는 부분 입니다. 그리고 gicode 뒤에가 티커 정보임을 확인할 수 있습니다. 또한 재무제표 내용이 테이블 형태로 나오므로 pandas를 이용하기 좋습니다. #파이썬 실습 우선 최근일에 해당하는 티커정보를 불러옵니다. 지난번에 sql에 저장해두었던 데이터를 이용합니다. 지난번 블로그를 참조해주세요. from sqlalchemy import create_engine ..
국내 주식 주가 데이터 크롤링 주가 정보를 수집할 수 있는 방법은 매우 많습니다. 그러나 퀀트 투자를 위한 백테스트나 종목선정을 위해서는 '수정주가'가 필요합니다. 수정주가란 액면분할 전 주가와 이후의 주가가 연속적으로 보이게 수정된 주가입니다. 수정주가 정보를 구할 수 있는 곳 중 하나로 '네이버 증권'을 이용하겠습니다. [네이버 증권] -> [삼성전자 검색] -> [차트]에 들어가신 후, 개발자 도구 화면에서 네트워크를 키십니다. (링크) 그리고 차트에서 [일] 버튼을 클릭하면 주가 정보를 어떻게 얻는지를 개발자 도구 화면에서 알 수 있습니다. 여기서 맨 위에 'siseJson.naver? ~' 부분을 클리하시고 request url에서 수정주가 정보를 받아오는 것을 알 수 있습니다. 해당 url을 복사하여 브라우저 검색창에 입력..
국내 주식 섹터 데이터 크롤링 FnGuide Index에서는 WICS 산업분류를 발표합니다. 해당 사이트에서 [WICS] -> [에너지]에 들어가시면 에너지 섹터에 대한 정보가 나옵니다. 여기서 [Components] 탭에 들어가시면 구성종목을 보실 수 있습니다. 이것을 크롤링 해보겠습니다. 우선 해당 페이지에서 개발자 도구 화면을 열고 네트워크를 눌러줍니다. 그리고 페이지에서 조회 날짜를 2023년 9월 5일로 찍어보면 개발자 도구화면에서 통신과정을 볼 수 있습니다. (조회 버튼을 누르는게 아니라 달력에서 해당 날짜를 클릭하세요) 통신과정에서 'GetIndexComponents~' 부분을 클릭 후, request url을 복사해주세요. 그리고 이것을 브라우저 주소창에 붙여넣고 엔터 눌러주세요. 그러면 아래의 이미지 처럼 섹터 정보가..
국내 주식 티커 데이터 크롤링하기_2 - MySQL로 데이터 옮기기 먼저 mysql에 데이터를 옮겨둘 데이터베이스와 테이블을 만듭시다. create database stock_db; use stock_db; create table kor_ticker ( 종목코드 varchar(6) not null, 종목명 varchar(20), 시장구분 varchar(6), 종가 float, 시가총액 float, 기준일 date, EPS float, 선행EPS float, BPS float, 주당배당금 float, 종목구분 varchar(5), primary key(종목코드, 기준일) ); 이제 저번 포스트에서 만들었던 데이터를 파이썬을 통해 옮겨봅시다. #mysql로 데이터 옮기기 import pymysql con = pymysql.connect(user='root', passwd =..
국내 주식 티커 데이터 크롤링하기_1 주식 데이터 크롤링에 앞서 가장 먼저 해야할 것은 최근 영업일 기준 데이터를 크롤링 하는 것입니다. #최근 영업일 데이터 크롤링 [네이버 금융] -> [국내증시] -> [증시자금동향] 접속(링크) 여기서 이전 2영업일 날짜가 나타납니다. 날짜는 네이버에서 자동으로 업데이트 해주므로 해당 부분을 크롤링 한 후 날짜에 해당하는 쿼리항목에 사용하면 됩니다. f12를 눌르고 날짜부분을 검사해 보면 해당 부분의 html 위치를 알 수 있습니다. [div태그 "subtop_sise_graph2" 클래스] -> [u1 태그 "subtop_chart_note" 클래스] -> [li 태그] -> [span 태그 "tah"클래스] 이것을 통해 날짜 데이터를 뽑아내겠습니다. ###### 최근 영업일 기준 데이터 받기 ###..
정규 표현식 실습 정규 표현식 실습을 해보겠습니다. import re #re.compile()를 통해 정규표현식을 컴파일 하여 변수에 저장한 후 사용가능 p = re.compile('[a-z]+')#알파벳 소문자가 1부터 여러개까지를 의미 m = p.match('python') print(m) print(m.group()) 'python'전부 매치됨을 확인할 수 있습니다. m = p.match('Use python') print(m) #None match함수는 시작 부분부터 일치 패턴을 찾아서 'Use python'와 매치가 안됩니다 결국 None이 출력됩니다. p = re.compile('[가-힣]+') m = p.match('파이썬') print(m) [가-힣]은 모든 한글을 뜻합니다. '파이썬'과 매치됩니다. p =..
정규 표현식(정규식) 종류 정규 표현식(정규식)이란 프로그래밍에서 문자열을 다룰 때 문자열의 일정한 패턴을 표현하는 일종의 형식 언어입니다. 정규 표현식은 파이썬만의 고유 문법이 아니라 문자열을 처리하는 모든 프로그래밍에서 사용되는 공통 문법입니다. 정규 표현식을 배우기 위해서는 '메타 문자'의 의미를 알아야 합니다. 프로그래밍에서 메타 문자란 문자가 가진 원래의 의미가 아닌 특별한 용도로 사용되는 문자입니다. 대괄호[ ]는 문자 클래스로써 대괄호 안에 포함된 문자들 중 하나와 매치를 뜻합니다. 예시로 'apple', 'blueberry', 'coconut'과 정규표현식[ae]와의 매치 여부를 보겠습니다. - 'apple' 에는 정규표현식 내의 a와 e가 모두 존재하므로 매치됩니다. - 'blueberry'에는 e가 존재하므로 매..
동적 크롤링 - 셀레니움 일반적인 크롤링으로는 정적 데이터, 즉 변하지 않는 데이터만을 수집할 수 있습니다. 정적 데이터는 한 페이지 안에서 원하는 정보가 모두 드러나는 것을 정적 데이터라고 합니다. 이와 달리, 입력, 로그인 등을 통해 데이터가 바뀌는 것을 동적 데이터라고 합니다. 예를 들어서, 네이버 지도에서 카페를 입력하여 지도에 표시되는 카페들을 클릭한다고 합시다. 이때 다른 카페를 클릭할 때 페이지가 전환되는게 아니라 같은 페이지에서 내용만 변경됩니다. 이러한 데이터가 동적 데이터입니다. 셀레니움을 이용하면 정적 데이터, 동적 데이터 모두 크롤링 가능하지만 상대적으로 속도가 느립니다. 그래서 일반적으로 정적 크롤링 할때는 일반적인 request 패키지를 이용하고, 동적 클롤링은 셀레리움을 이용합니다. #동적 크롤링 실습..