크롤링을 하다 보면 목록 페이지가 사라진 사이트를 만납니다. 예전에는 "질문 목록" 화면이 있어 거기서 링크를 훑으면 됐는데, 개편 뒤로 목록은 없어지고 개별 질문 페이지만 남는 경우입니다. 이럴 때 화면만 보면 "긁을 수 없는 사이트"처럼 느껴지지만 요즘 사이트가 화면을 그리는 방식을 알면 길이 보입니다. 법률 상담 게시판 한 곳이 정확히 이런 상황이었고 개별 페이지가 품은 공개 렌더링 데이터를 활용해 풀었습니다.
서버가 미리 그려 내려보내는 데이터
요즘 많은 사이트는 서버에서 페이지를 미리 그린 뒤, 그 화면에 쓰인 데이터를 페이지 안에 함께 담아 내려보냅니다. 브라우저는 이 데이터를 받아 곧바로 화면을 완성합니다. 이 데이터는 사람이 보는 화면과 같은 내용을 담고 있지만 화면에 흩어진 글자를 긁는 것보다 훨씬 깔끔한 형태로 구조화되어 있습니다. 제목, 분류, 작성 시각 같은 값이 이미 정리된 상태로 들어 있습니다.
목록 페이지가 사라진 게시판도 개별 질문 페이지에는 이 데이터가 그대로 남아 있었습니다. 화면 위에서 선택자로 글자를 긁는 대신, 페이지에 실려 오는 이 공개 데이터에서 제목과 분류를 바로 읽어 내면 파싱이 훨씬 안정적입니다. 화면 디자인이 조금 바뀌어도 데이터의 구조는 잘 바뀌지 않기 때문입니다.
목록이 없으니 최근 글을 가늠한다
문제는 목록이 없다는 것이었습니다. 어떤 글이 최근 글인지 알려 주는 화면이 없으므로, 최근 글을 스스로 가늠해야 했습니다. 이 게시판은 질문마다 번호가 순서대로 붙는 구조였습니다. 그래서 충분히 큰 번호에서 시작해 유효한 질문이 나오는 지점을 찾고 거기서부터 번호를 하나씩 낮춰 가며 최근 글을 거슬러 모으는 방식을 썼습니다.
번호가 순서대로 붙는다고 모든 번호에 글이 있는 것은 아닙니다. 중간중간 삭제되거나 비공개인 번호가 있어 빈 응답이 돌아옵니다. 그래서 유효한 글은 모아 두고 빈 번호는 세어 두되, 빈 번호가 연달아 일정 횟수 이상 나오면 "최근 범위의 끝에 도달했다"고 보고 탐색을 멈추게 했습니다. 이렇게 하면 오래된 번호 대역까지 무한정 내려가지 않습니다.
조기 종료로 요청을 아낀다
매일 수집하는 상황에서는 이미 모은 오래된 질문을 다시 받을 이유가 없습니다. 그래서 각 질문에 담긴 작성 시각을 보고 지난번 수집 시점보다 오래된 글이 나오면 그 지점에서 멈추게 했습니다. 번호가 최근 순으로 내려가므로, 한 번 오래된 글을 만나면 그 아래는 볼 필요가 없습니다. 이 조기 종료 덕분에 하루치 새 질문만 가볍게 걷어 올 수 있습니다.
요청 사이에는 짧은 간격을 두어 상대 서버에 부담을 주지 않도록 했습니다. 공개된 글 하나하나를 사람이 열람하는 것보다 완만한 속도로 받아 오는 설계입니다. 시간 범위로 새 글만 모으는 증분 수집의 전체 그림은 매일 도는 증분 수집 설계에서 더 다룹니다.
화면 파싱보다 데이터가 안정적이다
이 방식의 이점은 안정성입니다. 화면 위 선택자에 기대는 파싱은 디자인이 바뀌면 쉽게 깨지지만 페이지가 품은 구조화된 데이터는 화면 개편에도 덜 흔들립니다. 물론 사이트가 데이터를 담는 방식 자체를 바꾸면 손봐야 하지만 그 빈도는 화면 변경보다 훨씬 낮습니다. 게시판마다 접근 방식이 다를 때 이런 선택을 어떻게 하나의 흐름으로 흡수하는지는 법률 Q&A 크롤러 아키텍처에서 이어집니다.
자주 묻는 질문
목록 페이지가 없으면 크롤링이 불가능한가요?
목록 화면이 없어도 개별 페이지에 접근할 방법이 있으면 수집은 가능합니다. 이 사례에서는 질문에 순서대로 붙는 번호를 단서 삼아 최근 글을 가늠하고 거기서 거슬러 올라가며 공개 데이터를 읽었습니다. 화면이 아니라 페이지에 실려 오는 데이터를 보는 것이 핵심입니다.
번호를 거슬러 올라가면 요청이 너무 많아지지 않나요?
빈 번호가 연달아 나오면 최근 범위의 끝으로 보고 멈추고 지난 수집보다 오래된 글을 만나면 조기 종료합니다. 여기에 요청 사이 간격까지 두어 하루치 새 질문만 걷는 선에서 요청 수를 억제합니다.
이렇게 모은 데이터는 화면 개편에 안전한가요?
화면 선택자에 기댄 파싱보다는 안전합니다. 페이지가 품은 구조화된 데이터는 디자인 변경에 덜 흔들리기 때문입니다. 다만 사이트가 데이터를 담는 구조 자체를 바꾸면 그 게시판 수집기만 손보면 되고 나머지 게시판 수집에는 영향이 없습니다.
이 수집기가 속한 전체 시스템은 법률 상담 게시판 통합 수집 자동화에서 볼 수 있습니다.