error | March 04, 2020
Zara 웹사이트 clone project를 하면서 크롤링 하는 과정이 필요했다.
Python으로 crawling 할 때 많이 쓰이는 beautifulsoup과 selenium으로 시도했는데,
selenium 같은 경우에는 버튼을 클릭하거나 스크롤을 조작하는 등 동적인 크롤링이 필요할 때 사용한다.
그러나 selenium은 무겁기 때문에 웬만하면 정적인 호출을 하고, 정 안되면 셀레늄을 사용하는 방향으로..
zara site에서는 제품 목록을 보여주는 페이지 말고도 각 제품의 상세페이지에 들어가서 크롤링을 해야했는데, 웬만하면 selenium을 사용하지 않고 크롤링을 해보고 싶었다.
그래서 목록 페이지에서 각 제품들이 걸린 링크 목록을 크롤링을 한 후, 그 목록들을 차례로 돌리면서 상세페이지를 크롤링 하는 방식을 사용했다.
열심히 시도하는 중에 갑자기 zara website에 접속이 되지 않았다. 과도한 크롤링으로 접속이 차단된 것이었다.
문제는, 모두가 같은 와이파이를 사용하고 있었기 때문에 내가 접속이 차단되자 다른 팀원들의 접속도 모두 차단 되었다.
크롤링으로 차단되는 경우는, 동적인 selenium을 사용했을 때 클릭 속도가 인간이 낼 수 없는 속도라고 판단되어 접속이 차단되는 것이라고 들었었다.
그래서 beautifulsoup을 사용하고 있었던 나는 이런 문제가 터질 것이라고는 상상도 못했다.
이번 사건을 통해 beautifulsoup으로도 크롤링 접속 차단이 될 수 있다는 걸 깨달았다..
아마도.. 웹사이트에 너무 빠르게 많이 접속해서 그런 것이 아닐까..
접속이 차단되었다는 에러 문구 아래에 문의하라고 이메일 주소가 적혀 있었고, 그곳으로 주저리주저리 적었다..
코딩 공부하는 학생인데.. 크롤링을 공부하다가 그만 차단이 되어버렸다.. 앞으로 그러지 않을 테니 제발 차단을 풀어달라..
관리가 되지 않는 메일인지 메일을 보냈는데 계속 전달 오류가 났다..
어떻게 해야하나 멘붕 상태에 빠져있는데 어느 순간 갑자기 접속이 되었다!!
아마 일시적으로 막아놓고 그들도 장사는 해야하니까 다시 자동으로 풀리도록 해둔 것 같았다ㅠㅠ 감사합니다..
가장 큰 실수는 time.sleep()으로 일시정지를 해놓지 않았던 것.
크롤링 할 때 중요한 것은, 내가 기계가 아니라고 어필해야 한다.
사람은 기계만큼 빠르지 않다. 그래서 작동할 때 중간중간 일시정지를 해서 사람이 클릭하는 속도처럼 해야한다.
그러나 크롤링 속도가 느려진다는 게 단점. 위의 사건을 겪으니 무서워져서 코드에 너무 많은 time.sleep을 걸게 되었다는..
import time
time.sleep(2) #2초동안 code를 실행시키지 않고 pause
requests를 보낼 때, 브라우저가 접속한 것이라고 header 정보를 수정해서 보내는 방법이 있다고 한다.
google에 requests header user agent
검색!
Tor
나 다른 VPN
을 사용하여 접속한 ip 주소를 감추거나 ip를 우회하여 접속하는 방법도 있다고 한다.
이 모든 방법들이 장단점이 있고, 어디에서는 이런 방법들을 사용해도 차단이 느려질 뿐 결국에는 다 차단된다고 한다.
웹사이트 입장에서, 보안을 위해서든 서버의 과부하를 막기 위해서든 크롤링봇을 차단하는 것에는 공감이 된다.
다만 공부하는 입장에서는 맘 놓고 크롤링 연습을 해보지 못한다는 게 아쉬울 뿐이다😭