일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 계획
- 슬픔
- 2020
- C++
- python
- dp
- 자작시
- 머신러닝
- 파이썬 강좌
- 파이썬 강의
- 라즈베리파이 모니터
- BOJ
- mmdetection
- 2021
- 백준
- python 강의
- it
- python 강좌
- 철학
- 파이썬
- 알고리즘
- dynamic programming
- 다이나믹프로그래밍
- mmcv
- 강의
- 강좌
- 라즈베리파이
- 프로그래밍
- 라즈베리파이3
- 공부
- Today
- Total
Stargazer
[파이썬/주식] python 네이버 시세 정보 크롤링 안됨 현상 해결방법 본문
주식 공부한다고 해놓고 놀기만해서 간만에 '파이썬 증권 데이터 분석' 이라는 책을 펼쳤다.
실습하려는데 시작부터 막히길래 (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() 함수를 이용해 헤더에 웹브라우저 정보를 입력해서 요청하면 정상적으로 잘 조회가 된다
↓공감은 큰 힘이 됩니다!
'프로그래밍 > Python' 카테고리의 다른 글
[파이썬] visual studio 캐쉬(?) 삭제 하기 - 디스크 용량 늘리기 (0) | 2022.08.16 |
---|---|
[파이썬] 기숙사 급식표 다운로드 프로그램 만들기 (0) | 2022.03.29 |
[Python] 모두가 쉬운 파이썬 - 제어문 (0) | 2021.01.11 |
[Python] 모두가 쉬운 파이썬 - 연산자 (0) | 2021.01.07 |
[Python] 모두가 쉬운 파이썬 - 함수 (0) | 2021.01.06 |