최근 만들고 있는 제품은 데이터 수집이 핵심이다.
워낙 데이터 수집 관련된 강의도 오래 했고, 웹에 대한 이해도 있는 편이라 크롤링은 전혀 문제가 없다고 생각했다.
실제로 지금까지는 대부분 문제가 없었다.
정말 특별한 경우(인스타그램의 데이터를 API 없이 수집해야 하거나..)가 아니고서야, 정적 페이지를 받아와 파싱해서 처리했었다.
지금 수집해야 하는 웹은 살펴보니 모든 홈 접근 외에 모든 페이지 이동이 POST로 이뤄져있었다. 세상에나.
그러다 보니 URL이 변경될 일이 없었다. 그래도 POST 요청의 응답으로 페이지가 전달되다 보니 브라우저에서 분석하기 쉬웠다.
모든 문제가 쉬웠으나, 신기하리만큼 브라우저로 접속했을 때의 응답과 코드로 요청했을 때의 응답이 달랐다. 쿠키나 요청필드, 헤더가 달라서 그랬던 건가 해서 확인했으나, 아니었다.
그러다 크롬 브라우저의 Network 탭을 분석하다 Payload에 처음 보는 문구를 발견했다. (unable to decode value) 라는 항목이 있었다. 해당 데이터를 URL encoded로 처리해서 보니 한글을 URL에서 처리할 때와 유사한 형태로 보여지고 있었다. 예를 들어 “알고”라고 검색하면 “%EC%95%8C%EA%B3%A0″라고 나오는 것처럼 말이다.
그런데 보통 이런 경우 자동으로 디코딩되어 한글을 표시해 주는데 처음 보는 문구였다. 꼬박 이틀을 고민하고, 혹시 값이 암호화된 것은 아닐까 고민하다가, 혹시 한글을 처리하는 인코딩 방식일까 싶어, 한글을 euc-kr 포맷으로 인코딩했을 때의 표시와 유사했다. 다만 파이썬에서 표시하는 \xec 와 같은 포맷이 아니라 웹과 유사한 %ec일 뿐이었다.
그래서, 인자값을 강제로 euc-kr로 인코딩하고 포매팅을 변경한 후 요청하니 잘 동작했다.
모든 웹은 개발자에 의해 동작이 결정되기 때문에, 웹을 자동화한다는 것은 언제나 변수가 있는 것 같다.
생각도 못 한 이슈 덕에 하나 더 배웠다.