반응형

오늘 (2017년 4월 29일) 나이키에서 업템포 '96 새로이 출시하였다.

아침 10시부터 Nike 공식 홈페이지를 통해서 구매할 수 있었는데 

이런 핫 아이템을 노리는 대부분의 사람들이 그러하듯이... 

구매 실패하였다.


그럼에도 불구하고 이미 구매한 사람들이 사이즈 변경을 위해 주문취소를 해서인지

간간히 몇몇 사이즈가 구매 가능한 상태가 되기도 한다.


이런 순간을 위해 F5(새로고침)를 꾸준히 눌러보기도 하겠지만 

그건 너무 피곤하잖아?


파이썬을 이용해서 입고 확인을 해보도록 하자.

(서버와 클라이언트간 http 통신을 통해 요청과 응답에 관한 이야기는 이전의 포스트에 작성되어 있으니 참고해도 좋겠다.)

코드는 아래와 같다.



line 2~5 :

http 통신을 위해 urllibe.request, 

http 통신의 결과로 응답받은 html 문서를 파싱하기 위해 beautifulSoup

짧은 시간에 너무 많은 요청을 보내선 안된다. 주기적으로 요청하기 위해 time

입고가 확인 되었을 때 메시지 박스로 알림을 받기위해 messagesbox를 사용한다.


line 9~10 :

무작정 무한히 요청할 수는 없으니 제한 횟수를 정한다.

(짦은 간격으로 엄청난 요청을 보내면..? 그게 바로 DDOS...)


line 13 :

Nike 웹페이지에서 Uptempo 모델을 구매할 수 있는 페이지의 URL을 uptempo 변수에 저장


line 15~18 :

urllib.request 를 이용해 uptempo 모델 페이지를 요청하고 응답받아 data 변수에 담는다.


line 23~30:

BeautilfulSoup를 이용해서 응답받은 html 데이터를 parsing 한다.

파싱을 하면서 h4 태그를 찾는다.

그 이유는 아래의 이미지에서 찾을 수 있는데

상품이 품절일 경우는 "품절" 텍스트를 감싸는 h4 태그가 존재한다.

(상품이 있을 경우에는 없다.)



품절인 경우와 상품이 있을 경우의 차이.


품절일 경우에만 존재하는 h4 태그 (class 속성은 tit, 컨텐츠는 품절)


이런 차이를 확인했으니 그대로 코드 반영한다.

1. h4를 먼저 찾고 (line 24) 

2. 찾은 h4 태그들 중 class 속성이 tit 인 태그를 찾는다.

3. 만약 있다면 품절!.


line 32~38:

품절이라면 일정 시간 sleep 후 다시 요청과 응답, 파싱 과정을 거친다.

품절이 아니라면 messagebox를 출력해 사용자에게 알림을 보낸다.


짧고 간단한 기능을 하고 있어 빠르게 작성할 수 있었다.

쉽게 이해할 수 있으리라 생각한다.


크롤링이라는게 구조적으로 크게 다르지 않다.

디씨 인사이드 갤러리를 크롤링하는 것과 나이키 웹페이지를 크롤링하는 것.

근본적으로는 서버에 해당 페이지를 요청하고 그 뒤 응답받은 문서에서 사용자가 원하는 데이터를 찾아내는 것.

구조적으로 동일하다.




반응형