Python 주식종목리스트 만들기, 현재가, 시세 조회하기 .feat 크롤링

     



주식관련 프로그램을 만들거나 주식 시세를 조회하려고 하면 반드시 부딪히는 문제가 있습니다.

뭐냐면 .. 대부분의 데이터에서 종목에 대한 키(key value)는 이름이 아니라 코드라는점!!!!


증권사에서는 보통 '종목마스터'라는 이름으로 부르는데 종목마스터에 기본 데이터는 종목코드 + 종목이름입니다.


'CODE' : 'NAME'


예를 들어 SK하이닉스는 000660 : SK하이닉스 쌍으로 저장되어있고, SK하이닉스 관련 정보를 조회하기 위해서는 000660 코드를 알아야합니다. 수많은 종목들이 있고 시장도 여러개가 있기 때문에 대부분의 증권사들은 코드로 종목을 관리합니다. (종목명이 바뀌는 경우도 있고요.) 하지만 실제로 이용자들은 코드의 존재를 잘 모릅니다. 이용자 입장에서는 종목이름이 더 편하죠. 누가 삼성전자 주가를 알고싶을때 '음 삼성전자는 종목코드 005930이니까 이걸로 조회해야지'하겠습니까? ㅎㅎ 따라서 우리는 화면에는 '삼성전자'라는 이름을 보여줄지언정, 내부에서는 005930을 사용해야합니다. 그러기 위해서는? 종목코드 - 종목이름 매핑데이터가 있어야하죠. 그게 바로 종목마스터입니다.


아무튼 저도 주식관련 프로그램을 만들려고 해봤는데, 이게 없으니까 엄청 불편하더라구요. 그래서 일단 종목마스터를 만들고 다른작업을 시작하려고 합니다. 제가 만든 코드는 다음포털에 finance 페이지를 크롤링해서 만들도록 되어있습니다. 코드는 아래 Github 꼬~


https://github.com/tkdlek11112/Korea_stock_market


코드를 보면 메소드가 2개 있습니다. 하나는 배치를 돌려서 종목마스터를 만드는 것이고, 하나는 현재가를 조회하는 샘플소스입니다.


Python으로 실행시키면 종목마스터가 Dictionary 형태로 출력되는 것을 확인할 수 있습니다.


{'060310': '3S', '054620': 'APS홀딩스', '265520': 'AP시스템', '211270': ...


저는 보통 종목마스터를 DB에 넣고 뽑아서 쓰는데, 생각보다 빈번하게 요청이 올라오기 때문에 프로그램 메모리에 올려놓고 사용하시는게 퍼포먼스가 더 좋습니다. 


하단에 있는 get_current_price는 현재가를 조회하는 메소드입니다. 종목마스터 소스보다 살짝복잡한데, 크롤링이 쪼금 더 어려워서 그렇습니다. 현재 조회하는 정보는 전일종가, 고가, 저가, 시가, 상한가, 하한가 정도인데 마음대로 추가할 수 있습니다. 추가하는 방법은 소스에 보시면 soup이라는 변수에 URL을 파싱한 정보를 담는것을 찾을 수 있습니다.


 soup = BeautifulSoup(r.text, 'lxml')


요기가 핵심인데, soup에 파싱된 데이터들이 잘 정렬되어 있고, 거기서 필요한 정보를 find로 찾으면 됩니다. 예를 들면 현재가를 얻기위해 아래와 같이 사용했습니다.


prpr = soup.find('em', 'curPrice')


자 이제 'em'과 'curPrice'가 뜻하는게 뭔지 궁금하실 텐데요, 앞에 인자는 Tag명이고 뒤에는 Class입니다. 이 값들은 실제 페이지에서 따오면 됩니다. 맥기준으로 safari에서 개발자용->페이지소스보기를 하시면 아래와같은 화면이 나옵니다.



아래 창이 나온게 보이시죠? 이제 오른쪽아래있는 과녁모양버튼을 클릭하고 크롤링하고 싶은 데이터를 선택합니다.


이뿌게 나옵니다. 클릭을 할경우 아래 세세한 코드를 볼 수 있습니다.



현재가가 em 태그와 curPrice down이라는 클래스명을 갖고있는 것을 확인할 수 있습니다. 현재가 말고 다른값도 이와 비슷하게 가져오시면됩니다. 







* 참고로 크롤링한 데이터를 상업적으로 이용하시면 안됩니다. 이용에 대한 책임은 사용자 본인에게 있습니다.

반응형

댓글

Designed by JB FACTORY