본문 바로가기
크롤링/파이썬 주식 크롤링

[파이썬을 이용한 주식 크롤링] 2. pd.read_html 함수가 작동하지 않는 이유

by 만다린망고 2020. 7. 17.
반응형

[파이썬을 이용한 주식 크롤링] 2. pd.read_html 함수가 작동하지 않는 이유


이번 시간에는 파이썬 크롤링을 이용하여 삼성전자의 재무재표를 얻어볼 것입니다. 결과적으로 실패하게 될건데요. 실패의 이유를 공부하는 것이 목적입니다. 


먼저 증권플러스 사이트에 들어가서, 삼성전자를 검색하여 들어갑니다. 들어 간 뒤, URL을 확인하면 아래와 같습니다. 


https://stockplus.com/m/stocks/KOREA-A005930


A005930은 종목코드입니다. 이 종목코드는 각 주식마다 고유하게 부여되는 번호입니다. 이 종목코드를 잘 이용하면 상장한 모든 주식의 정보를 쉽게 얻을 수 있습니다.


가장 오른쪽 탭인 '분석'을 클릭합니다. URL은 위와 같이 변합니다.


https://stockplus.com/m/stocks/KOREA-A005930/analysis


스크롤을 아래로 내리면 재무재표가 나옵니다. 우리가 원하는 정보는 여기 있습니다. 




이제 본격적으로 크롤링을 해봅시다. 가장 일반적인 크롤링 방법은 원하는 정보가 있는 html 태그에 접근하여, 해당 정보를 파이썬으로 가져오는 것입니다. html 태그에 접근하기 위해 [우클릭]-[검사] 를 클릭합니다. 


아래 코드를 실행합니다 .


import requests

import pandas as pd


my_url="https://stockplus.com/m/stocks/KOREA-A005930/analysis"


table=pd.read_html(my_url)


my_url 은 url 주소를 입력한 변수입니다. pd.read_html 은 해당 url의 소스코드(html)에서 table 에 해당되는 부분을 가져오는 코드입니다. 


실행하면 아래와 같이 에러가 뜹니다. 


ValueError: No tables found


소스코드에는 표가 없다는 것인데요. 해당 페이지에서 우클릭을 하고 [페이지 소스 보기] 를 클릭하면 소스코드가 나옵니다. 여기서 Ctrl+F를 하고 table 을 검색하면 나오지 않습니다. (writable 은 table이 아닙니다)


크롬개발자 도구에서는 보여지지많 페이지 소스에서는 나오지 않는 이유는 Ajax (Asynchronous JavaScript and XML)로 데이터를 요청하는 것이기 때문입니다. 요청해오는 URL을 알아내서, 이 URL의 소스코드를 가져와야 됩니다. 


크롬개발자도구에서 Network를 클릭합니다. 





다른 탭을 눌렀다가, 다시 분석탭을 누르면 URL이 요청되는 것을 알 수 있습니다. 요청된 URL 중에서 우리가 원하는 정보는 아래와 같습니다 .





링크를 가져옵시다. 


https://stockplus.com/api/companies/KOREA-A005930/financial_statements.json


json 데이터라는 것을 알 수 있습니다. json 데이터는 "키-값 쌍" 으로 이루어진 텍스트 포멧입니다. 


다음시간에는 json 데이터를 표로 변환하여 우리가 재무재표표를 얻어봅시다.



반응형

댓글