2008-08-28 7 views
11

방금 ​​웹 크롤러를 생성/사용자 정의하는 것에 대해 생각하기 시작했으며 웹 크롤러/로봇 에티켓에 대해 거의 알지 못합니다. 내가 발견 한 에티켓에 관한 대부분의 글은 오래되고 어색한 것처럼 보이기 때문에 웹 개발자 커뮤니티에서 현재 (실제적인) 통찰력을 얻고 싶습니다.웹 크롤러를 만들 때 고려해야 할 주요 고려 사항은 무엇입니까?

사이트 XYZ의 마크 업은 조건 ABC를 충족합니까? "간단한"목적을 위해 "웹"을 걷기 위해 크롤러를 사용하고 싶습니다.

이 나를 위해 많은 질문을 제기,하지만 난 내가 먼저 비켜하는 데 필요한 두 가지 질문이 생각하는 다음 가서 얻을에서

  • 그것은 조금 "불확실"느낌 - 이런 종류의 일이 용납 될까요?
  • 사람들을 화나게하지 않기 위해 크롤러가 취해야 할 구체적인 고려 사항은 무엇입니까?

답변

9

Obey robots.txt (너무 공격적이어서 이미 말한 것처럼).

사용자 에이전트 문자열에 대해 생각해보십시오. 사용자 에이전트 문자열은 자신이하고있는 일과 연락 할 수있는 방법에 대해 미리 알기에 좋은 장소입니다.

+1

사용자 에이전트에 연락처 정보를 넣는 것은 사이트 관리자에게 스파이더를 소개하고 연락처 정보를 입력하여 친숙하고 위의 사람임을 분명하게 알 수있는 좋은 방법입니다. 사이트에 광고를 게재하는 데 문제가있는 경우 피드 또는 API를 얻을 수있는 경우 해당 피드와 협력 할 수있는 기회가있을 수 있습니다. 해당 정보를 난독 화하거나 제공하지 못하면 즉시 도끼로 이동하여 도메인을 금지하여 액세스를 차단합니다. –

2

나는 당신이 일으키는 하중을 고려하는 것이 매우 중요하다고 말하고 싶습니다. 예를 들어 크롤러가 단일 사이트의 모든 개체를 한 번에 더 많이 또는 적게 요청하면 특정 사이트에 대한로드 문제가 발생할 수 있습니다.

즉, 크롤러가 지나치게 공격적이지 않은지 확인하십시오.

2

각 세션마다 각 페이지를 한 번만 방문하면됩니다. 기술적으로 검색 창을 만들 때 robots.txt 및 no-cache 규칙을 준수해야합니다. IP 차단으로 필요할 경우 사람들은 여전히 ​​봇을 차단할 수 있습니다.

내가 말할 수있는 한 소스 코드를 찾고있는 것이므로 스타일 시트는 <link>이고, JavaScript는 <script src="..."></script>입니다.

2

로드는 큰 고려 사항입니다. 특정 사이트를 얼마나 자주 크롤링하는지, 그리고 목표를 달성하는 데 필요한 가장 기본적인 정보는 무엇인지 제한하십시오. 텍스트를 찾고 있다면 모든 이미지를 다운로드하지 마세요.

물론 robots.txt를 준수하면서도 사용자 에이전트 문자열에 정확한 연락처 정보가 포함되어 있는지 확인하고 웹 페이지에 대한 링크를 사용하여 수행중인 작업과 수행 방법을 설명하십시오. 웹 관리자가 많은 요청을보고 호기심이 많으면 유익한 웹 페이지로 많은 질문에 답변 할 수 있습니다.

3

WillDean과 Einar의 답변에 더하여, HTTP 응답 코드의 의미와 크롤러가 각각의 문제를 해결할 때해야 할 일에 대해 읽어 보는 것이 좋습니다. 귀하의 실적, 그리고 더 튼튼하거나 그렇지 않은 경우 귀하는 일부 사이트에서 금지됩니다.

몇 가지 유용한 링크 :

HTTP/1.1: Status Code Definitions

Aggregator client HTTP tests

Wikipedia

3

로봇은 왜 무엇을// 설명 사용자 에이전트 문자열에 URL을 포함하시기 바랍니다 크롤링.

3

또한 봇 메타 태그를 순종하는 것을 잊지 마세요 : http://www.w3.org/TR/html4/appendix/notes.html#h-B.4.1.2

에 대해 생각하는 또 다른 것은 - 거미 페이지가 결정하는 일이 존재하지 않거나 오류가없는 너무 조급하지 마십시오. 일부 페이지는 유지 보수 작업이나 오류로 인해 단기간에 수정되어 오프라인 상태입니다.

+1

다른 페이지에서 가리키고 있기 때문에 페이지가 있어야한다고 생각되면 나중에 다시 시도 할 수 있도록 코드를 "재시도"대기열에 삽입 한 코드를 가지고 있습니다. 다시 실패하면 카운터가 재시도 제한을 초과 할 때까지 카운터가 증가하거나 페이지가 다시 온라인 상태가됩니다. –

3

좋은 점은 모두 여기에 나온 것입니다. 동적으로 생성 된 Java 및 JavaScript 링크, 매개 변수 및 세션 ID, 단일 및 이중 따옴표 이스케이프, 상대 링크 (예 : ../../를 사용하여 루트 디렉토리를 지나갈 때 사용), 대소 문자 구분, 프레임, 리디렉션, 쿠키 ....

나는 며칠 동안 계속 될 수 있었고, 다소 있습니다. 나는 이것의 대부분을 다루는 Robots Checklist을 가지고 있으며, 나는 내가 할 수있는 것에 행복하게 대답한다.

오픈 소스 로봇 크롤러 코드를 사용하면 이러한 모든 문제에 대해 큰 도움이되기 때문에 생각해야합니다. 그 페이지도 있습니다 : open source robot code. 희망이 도움이됩니다!

2

거미가 스팸 사이트로 침체되는 것을 피하기 위해 사이트/도메인 또는 다른 것들 (IP 범위, ASN 등)을 차단하는 기능을 추가해야합니다.

시간 제한 및 동작을 제어 할 수있는 HTTP 구현이 필요합니다. 많은 사이트에서 잘못된 응답, 거대한 응답, 쓰레기 헤더를 보내거나 응답을하지 않고 무기한으로 연결을 열어 놓으십시오.

또한 "페이지가 있음"을 의미하는 200 상태를 신뢰하지 마십시오. 사이트의 상당 부분이 "찾을 수 없음"또는 기타 오류로 인해 200 번을 보내므로 내 경험상 (큰 HTML 문서와 함께).

+1

자신의 사이트에 갇혀 있고 내부적으로 "이봐,이 페이지는 존재하지 않지만 우리는 당신에게 알려줌으로써 내부적으로 리디렉션되는 커스텀 오류 페이지에 대해서는'200'을 얻을 것입니다. 페이지는 스파이더의 저자를 전혀 돕지 않습니다. –