목적: 웹에 새로 올라오거나 갱신된 콘텐츠(웹 페이지, 이미지 or 비디오, PDF 파일 등)를 찾아내는 것
검색 엔진 인덱싱
크롤러의 가장 보편적인 용례이며, 웹 페이지를 모아 검색 엔진을 위한 로컬 인덱스 생성
웹 크롤러가 HTML 파일 정보를 모두 저장한 후에 이 정보에 대해 빠르게 접근할 수 있도록, 쉽게 말해 ‘정리’ 하는 과정
웹 아카이빙
나중에 사용할 목적으로 장기보관하기 위해 웹에서 정보를 모으는 절차
ex) 국립 도서관이 크롤러를 돌려 웹 사이트를 아카이빙
웹 마이닝
인터넷에서 유용한 지식을 도출해내는 것
ex) 유명 금융 기업 → 크롤러를 사용해 주주 총회 자료나 연차 보고서를 다운 받아, 기업의 사업 방향 탐색
웹 모니터링
인터넷에서 저작권이나 상표권이 침해되는 사례 모니터링
크롤러가 가능한 많은 링크를 탐색할 수 있도록 하는 URL을 고르는 것이 바람직
웹 크롤러는 다운로드할 URL과 다운로드된 URL, 이렇게 2가지로 나누어 관리
‘다운로드할 URL’ 을 저장 관리하는 컴포넌트가 바로 미수집 URL 저장소
미수집 URL 저장소에 있는 URL의 웹 페이지를 다운로드하는 컴포넌트
웹 페이지를 다운 받기 위해 URL 주소 → IP 주소로 변환하는 절차 필요
HTML 다운로더는 ‘도메인 이름 변환기’를 이용해 URL에 대응되는 IP주소 얻음
웹 페이지 다운로드 후, 파싱과 검증 절차 필요
크롤링 서버 안에 파서를 구현하면 크롤링 과정이 느려질 가능성이 있어, 독립된 컴포넌트로 구현
중복된 콘텐츠 문제를 해결하기 위해 자료 구조를 도입해 데이터 중복을 줄이고, 데이터처리에 소요되는 시간을 줄인다.
웹 페이지의 해시 값 비교
HTML 문서를 보관하는 시스템
대부분의 콘텐츠는 디스크에 저장, 인기 있는 콘텐츠만 메모리에 저장
HTML 페이지를 파싱하여 링크들을 골라내는 역할
<body>
<li><a href="/wiki/Cong_Weixi" title="Cong Weixi">Cong Weixi</a></li>
<li><a href="/wiki/Kay_Hagan" title="Kay Hagan">Kay Hagan</a></li>
<li><a href="/wiki/Vladimir_Bukovsky" title="Vladimir Bukovsky">Vladimir Bukovsky</a></li>
<li><a href="/wiki/John_Conyers" title="John Conyers">John Conyers</a></li>
</body>
위와 같은 HTML 코드에 있는 상대 경로는 `https://en.wikipedia.org` 를 붙여 절대 경로로 변환
특정한 콘텐츠 타입이나, 파일 확장자를 갖는 URL, 접속 시 오류가 발생하는 URL, 접근 제외 목록(deny list)에 포함된 URL 등을 크롤링 대상에서 배제하는 역할
이미 방문한 적이 있는 URL인지 추적하면, 같은 URL을 여러 번 처리하는 일 방지 → 서버 부하 감소 및 시스템이 무한 루프에 빠지는 일 방지
사용되는 자료구조로는 블룸 필터 or 해시 테이블
이미 방문한 URL을 보관하는 저장소
웹은 유항 그래프 형태이다. 페이지는 노드이고, 하이퍼링크가 엣지이다.
그래프 탐색 방법은 DFS와 BFS가 있는데, DFS (Depth-First Search) 는 좋은 선택이 아닐 수도 있다. (깊이 자체가 가늠하기 어렵기 때문)
따라서 보통 BFS를 사용해 탐색할 URL을 집어넣고, 다른 한쪽으로는 꺼내는 FIFO 큐를 사용
하지만 이 구현 방법에는 2가지 문제점이 있다.
미수집 URL 저장소만 잘 구현한다면, 예의 없는 크롤러에서 벗어날 수 있다.
무례한 일: 수집 대상 서버로 짧은 시간 안에 너무 많은 요청을 보내는 것
예의 바른 크롤러를 만드는 데 있어서 지켜야 할 한 가지 원칙
: 동일 웹 사이트에 대해서는 한 번에 한 페이지만 요청
호스트 | 큐 |
---|---|
wikipedia.com | b1 |
apple.com | b2 |
웹 페이지는 수시로 추가, 삭제 변경
→ 이미 다운로드한 페이지여도 주기적으로 재수집 필요
아래 두 가지 전략 사용
웹사이트가 크롤러와 소통하는 표준적 방법
이 파일에는 크롤러가 수집해도 되는 페이지 목록이 들어 있다.
이 파일은 주기적으로 다운받아 캐시에 보관
도메인 이름 변환기는 크롤러 성능의 병목 지점 중 하나
DNS 요청 처리 시간은 보통 10ms ~ 200ms 소요