Study

[HTTP 완벽 가이드] 9장 : 웹 로봇

이웃비 2021. 1. 13. 21:15

9.1 크롤러와 크롤링

웹 크롤러는, 먼저 웹페이지를 한 개 가져오고, 그 다음 그 페이지가 가리키는 모든 웹페이지를 가져오고, 다시 그 페이지들이 가리키는 모든 웹페이지들을 가져오는 이러한 일을 재귀적으로 반복하는 방식으로 웹을 순화하는 로봇이다

 

9.1.1 어디에서 시작하는가: '루트 집합'

  • 크롤러가 방문을 시작하는 URL들의초기 집합은 루트 집합이라고 한다.
  • 루트 집합을 고를 때, 모든 링크를 크롤링하면 결과적으로 관심있는 웹페이지들의 대부분을 가져 오게 될 수 있도록 해야한다

9.1.2 링크 추출과 상태 링크 정상화

크롤러는 검색한 각 페이지 안에 들어있는 URL 링크들을 파싱해서 크롤링할 페이지들의 목록에 추가해야한다

 

9.1.3 순환 피하기

로봇들은 순환을 피하기 위해 반드시 그들이 어디를 방문했는 지 일아야 한다

 

9.1.4 루프와 중복

 순환이 해로운 이유  

  1. 순환은 크롤러를 루프에 빠트려서 꼼짝 못하게 할 수 있다
  2. 크롤러가 같은 페이지를 반복해서 가져오면 고스란히 웹 서버의 부담이 된다
  3. 루프 자체가 문제가 되지 않더라도, 크롤러는 많은 수의 중복된 페이지들을 가져오게 된다

9.1.5 빵 부스러기의 흔적

 크롤러가 방문한 곳을 관리하기 위해 사용하는 기법들 

  1. 트리와 해시 테이블 - 방문한 URL을 추적하기 위해 사용한다
  2. 느슨한 존재 비트맵 - 공간 사용을 최소화하기 위해 존재 비트 배열과 같은 자료구조를 사용한다
  3. 체크포인트 - 로봇이 갑자기 중단될 경우를 대비해, 방문한 URL의 목록이 디스크에 저장되었는지 확인한다
  4. 파티셔닝 - 로봇들은 URL들의 특정 한 부분을 할당받아 일을 수행한다.

9.1.6 별칭(alias)과 로봇 순환

 같은 URL을 가리키게 되는 경우 

  1. 기본 포트가 80 일때
  2. %7F이 ~과 같을 때
  3. 태그에 따라 페이지가 바뀌지 않을 때
  4. 서버가 대소문자를 구분하지 않을 때
  5. 기본 페이지가 index.html일때
  6. www.foo.com이 이 아이피 주소를 가질 때

9.1.7 URL 정규화하기

 웹 로봇이 URL을 표준 형식으로 '정규화'하는 예 

  1. 포트 번호가 명시되지 않았다면, 호스트명에 :80 을 추가한다
  2. 모든 %xx 이스케이핑된 문자들을 대응되는 문자로 변환한다
  3. #태그들을 제거한다

9.1.8 파일 시스텝 링크 순환

파일 시스템의 심벌리 링크는 사실상 아무것도 존재하지 않으면서도 끝없이 깊어지는 디렉터리 계층을 만들 수 있기 때문에, 매우 교묘한 종류의 순환을 유발할 수 있다

 

9.1.9 동적 가상 웹 공간

 

 

9.1.10 루프와 중복 피하기

 웹에서 로봇이 더 올바르게 동작하기 위해 사용하는 기법 

  1. URL 정규화
  2. 너비 우선 크롤링
    • 방문할 URL들을 웹 사이트들 전체에 걸쳐 너비 우선으로 스케쥴링하면, 순환의 영향을 최소화할 수 있다
  3. 스로틀링
    • 로봇이 웹 사이트에서 일정 시간 동안 가져올 수 있는 페이지의 숫자 제한
  4. URL 크기 제한
    • 일정 길이를 넘는 URL의 크롤링을 거부한다
  5. URL/사이트 블랙리스트
    • 함정인 것으로 알려진 URL의 목록을 만들어 관리하고 피한다.
  6. 패턴 발견
    • 반복되는 구성요소를 가진 URL을 잠재적인 순환으로 보고 , 둘 혹은 셋 이상의 반복된 구성요소를 갖고 있는 URL을 크롤링하는 것을 거절한다
  7. 콘텐츠 지문
    • 콘텐츠 지문을 사용하는 로봇들은 페이지의 콘텐츠에서 몇 바이트를 얻어내어 체크섬을 계산한다
    • 어떤 웹 서버들은 동적으로 페이지를 수정하기 때문에, 로봇들은 특정 부분들을 체크섬 계산에서 빠트린다
  8. 사람의 모니터링

9.2 로봇의 HTTP

9.2.1 요청 헤더 식별하기

  • 로봇 구현자들은 로봇의 능력 신원 출신을 알려주는 기본적인 몇 가지 헤더를 사이트에게 보내준다
  • 잘못된 크롤로의 소유자를 찾아낼 때와 서버에게 로봇이 어떤 종류의 콘텐츠를 다룰 수 있는지에대한 약간의 정보를 주려 할 때 사용한다
  • 기본적인 식별 헤더 : User-Agent, From, Accpt, Referer

9.2.2 가상호스팅

  • 요청에 Host헤더를 포함하지 않으면 로봇이 어떤 URL에 대해 잘못된 콘텐츠를 찾을수있다
  • HTTP/1.1은 Host헤더를 사용할 것을 요구한다

9.2.3 조건부 요청

로봇 중 몇은 시간이나 엔터티 태그를 비교해 마지막 버전 이후에 업데이트 된 것 이 있는지 알아보는 조건부 HTTP 요청을 구현한다

 

9.2.4 응답 다루기

HTTP특정 몇몇 기능을 사용하는 로봇들이나, 웹 탐색이나 서버와의 상호작용을 더 잘 해보려고 하는 로봇들은 여러 종류의 HTTP응답을 다룰 줄 알아야한다

 

9.2.5 User-Agent 타기팅

많은 웹 사이트들은 그들의 여러 기능을 지원할 수 있도록 브라우저의 종류를 감지하여 그에 맞게 콘텐츠를 최적화한다.

 

9.3 부적절하게 동작하는 로봇들

 로봇이 저지르는 실수들 

  1. 폭주하는 로봇
    • 로봇이 에러를 가지거나 순환에 빠질경우 서버에 과부하를 줄 수 있다
  2. 오래된 URL
    • 존재하지 않는 문서에 대한 접근 요청으로 에러로그를 채우거나 에러 페이지를 제공하는 부하를 줄 수 있다
  3. 길고 잘못된 URL
    • URL이 길 경우 웹 서버의 처리 능력에 영향을 준다
  4. 호기심이 지나친 로봇
    • 어떤 로봇들은 사적인 데이터에 대한 URL을 얻어 그 데이터를 인터넷 검색엔진이나 기타 애플리케이션을 통해 접근할 수 있도록 만들 수 있다
  5. 동적 게이트웨이 접근
    • 로봇은 게이트웨이 애플리케이션의 콘텐츠에 대한 URL로 요청할 수 있다. 이 경우 처리 비용이 많이 들 수 있다.

9.4 로봇 차단하기

9.4.1 로봇 차단 표준

로봇 차단 표준의 임시방편으로 마련된 표준으로, 오늘날 대부분의 로봇들은 v.0.0 이나 v.1.0을 채택하고있다

 

9.4.2 웹 사이트와 robots.txt

robots.txt 가져오기

  • 로봇은 HTTP GET메서드를 이용해 robots.txt 리소스를 가져온다
  • robots.txt가 존재하면 text/plain 본문으로 반환한다

응답 코드

  • HTTP 상태 코드 200 : 그 응답의 콘텐츠를 파싱하여 차단 규칙을 얻어 따른다
  • HTTP 상태 코드 404 : 차단 규칙이 없다고 가정하고 robots.txt의 제약 없이 접근한다
  • HTTP 상태 코드 401, 403 : 접근이 완전히 제한되어있다
  • HTTP 상태 코드 503 : 그 사이트의 리소스를 검색하는 것은 뒤로 미루어야 한다
  • HTTP 상태 코드 3XX : 로봇은 리소스가 발견될 때까지 리다이렉트를 따라가야 한다

 


  • 로봇은 자신이 이해하지 못하는 필드는 무시해야 한다

  • 하위 호환성을 위해, 한 줄을 여러 줄로 나누어 적는 것은 허용되지 않는다

  • 주석은 문자 #로 시작해서 그 뒤에 줄바꿈 문자가 나올 때까지 이어지는 주석 내용으로 이루어진다

  • 버전 0.0은 Allow줄을 지원하지 않았다. 이런 경우 허용되는 URL도 탐색하지 않을 수 있다

  • 로봇 META 태그는 다른 모든 HTML META태그와 마찬가지로 반드시 HTML 페이지의 HEAD섹션에 나타나야 한다