Stargazer

[파이썬/주식] python 네이버 시세 정보 크롤링 안됨 현상 해결방법 본문

프로그래밍/Python

[파이썬/주식] python 네이버 시세 정보 크롤링 안됨 현상 해결방법

COM2IT 2021. 1. 28. 18:01
반응형

주식 공부한다고 해놓고 놀기만해서 간만에 '파이썬 증권 데이터 분석' 이라는 책을 펼쳤다.

실습하려는데 시작부터 막히길래 (188pg)

뭐지 싶어서 2시간을 검색해서 겨우 해답을 찾았다. 

 

내가 막힌 부분은 네이버 증권에서 각 종목의 일별 시세를 가져오는 예제 였는데

urlopen을 이용한 예제였다.

 

그런데 아무리 해봐도 AttributeError: 'NoneType' object has no attribute 'a' 가 뜨길래

url이 잘못 됐는지 문자 하나하나 확인하고, 코드가 잘못됐는지 예제랑 비교해봐도 똑같아서,

내가 모르는 문법이 있나? 새로 바뀐 문법이 있나? 하면서 이리저리 애꿎은 파이썬 문법만 뒤졌다.

 

이 오류 같은 경우에는 내가 불러온 html에는 해당 속성이 존재하지 않는다

즉, 내가 다른 주소를 입력했거나, 없는 주소라는 건데

이게 알고보니 네이버의 문제였던 거다.

(추후에 이 문제로 책을 새로 개정하던가 해야할 것 같다)

 

원인은 네이버가 웹 스크레이핑을 차단해서 파이썬을 통해 urlopen()으로 그냥 생으로 접속하게 되면 해당 주소가 없는 주소라고 결과를 보낸다

 

이러한 차단방식은 http 패킷 해더에 브라우저 정보(User-Agent)가 존재하는지 확인하는 방식이다

그래서 http 요청 패킷에 웹브라우저 정보를 보내주면 실제 웹브라우저를 통한 접속처럼 인식 하기 때문에 말끔히 해결 된다.

 

1
2
3
4
5
6
import requests
 
code = '068270' #셀트리온 코드
url = f"http://finance.naver.com/item/sise_day.nhn?code={code}"
req = requests.get(url, headers={'User-agent''Mozilla/5.0'})
html = BeautifulSoup(req.text, "lxml")
cs

 

requests.get() 함수를 이용해 헤더에 웹브라우저 정보를 입력해서 요청하면 정상적으로 잘 조회가 된다

 

↓공감은 큰 힘이 됩니다!

반응형
Comments