사용자 에이전트에서 URL 앞에 더하기 부호


10

작은 웹 크롤러를 실행하고 사용할 사용자 에이전트를 결정해야했습니다. 크롤러 에이전트Wikipedia 목록은 다음 형식을 제안합니다.

 examplebot/1.2 (+http://www.example.com/bot.html)

그러나 일부 봇은 URL 앞에 더하기 부호를 생략합니다. 그리고 나는 그것이 처음에 무엇을 의미하는지 궁금하지만 설명을 찾을 수 없었습니다. RFC 2616은 괄호 안의 모든 것을 주석으로 간주 하며 형식을 제한하지 않습니다. 그러나 브라우저는 브라우저 버전과 기능을 알리는 주석에 세미콜론으로 구분 된 토큰 목록을 갖는 것이 일반적입니다. 나는 이것이 대부분의 브라우저와 비슷한 방식으로 표준화되지 않았다고 생각합니다. 그리고 의견에서 URL과 관련된 것을 찾을 수 없었습니다.

내 질문은 왜 더하기 기호입니까? 필요합니까?

답변:


6

내가 찾은 첫 번째 사용법은 Heritrix 크롤러를 사용하는 것 입니다. 에서 이 설명서 문서 , 나는 다음과 같은 결과 :

6.3.1.3.2. user-agent heritrix를 처음 시작할 때 표시되는 초기 사용자 에이전트 템플릿은 다음과 같습니다.

Mozilla / 5.0 (호환 가능, heritrix / 0.11.0 + PROJECT_URL_HERE

최소한 PROJECT_URL_HERE을 (를) 변경하고 웹 마스터가 크롤링을 실행중인 조직이나 개인에 대한 정보를 볼 수있는 웹 사이트를 배치해야합니다.

사용자 에이전트 문자열은 다음 형식을 준수해야합니다.

[선택 텍스트] ([선택 텍스트] + PROJECT_URL [선택 텍스트]) [선택 텍스트]

URL 앞에 괄호와 더하기 부호가 있어야합니다. 유효한 사용자 에이전트의 다른 예는 다음과 같습니다.

내 상속자 크롤러 (+ http://mywebsite.com)

Mozilla / 5.0 (호환 가능, 덤불 크롤러 + http://whitehouse.gov)

Mozilla / 5.0 (호환, http://loc.gov의회 도서관 대신 os-heritrix / 0.11.0 + )


5

http://www.user-agents.org/ 에서 모든 사용자 에이전트를 다운로드 하고 +스타일 링크와 일반 링크 를 사용한 에이전트 수를 계산하는 스크립트를 실행했습니다 . RFC 2616과 일치하지 않는 "비표준"사용자 에이전트 문자열을 제외했습니다.

결과는 다음과 같습니다.

Total: 2471
Standard: 2064
Non-standard: 407
No link: 1391
With link: 673
Plus link: 145
Plain link: 528
Plus link only: 86
Plain link only: 174

따라서 링크가 21 % 만 포함 된 673 개의 사용자 에이전트에는 플러스가 포함됩니다. 단지 링크 인 주석이있는 260 명의 사용자 에이전트 중 33 %만이 플러스를 포함합니다.

이 분석에 따르면 플러스는 일반적이지만 대부분의 사용자 에이전트는이를 사용하지 않기로 선택합니다. 제외하는 것이 좋지만 포함하는 것도 좋을 것입니다.

이 분석을 직접 실행하려면이 분석을 수행 한 Perl 스크립트가 있습니다.

#!/usr/bin/perl

use strict;

my $doc="";

while(my $line = <>){
    $doc.=$line;
}

my @agents = $doc =~ /\<td class\=\"left\"\>[ \t\r\n]+(.*?)\&nbsp\;/gs;

my $total = 0;
my $standard = 0;
my $nonStandard = 0;
my $noHttp = 0;
my $http = 0;
my $plusHttp = 0;
my $noPlusHttp = 0;
my $linkOnly = 0;
my $plusLinkOnly = 0;

for my $agent (@agents){
    $total++;
    if ($agent =~ /^(?:[a-zA-Z0-9\.\-\_]+(?:\/[a-zA-Z0-9\.\-\_]+)?(?: \([^\)]+\))?[ ]*)+$/){
        print "Standard: $agent\n";
        $standard++;
        if ($agent =~ /http/i){
            print "With link: $agent\n";
            $http++;
            if ($agent =~ /\+http/i){
                print "Plus link: $agent\n";
                $plusHttp++;
            } else {
                print "Plain link: $agent\n";
                $noPlusHttp++;
            }
            if ($agent =~ /\(http[^ ]+\)/i){
                print "Plain link only: $agent\n";
                $linkOnly++;
            } elsif ($agent =~ /\(\+http[^ ]+\)/i){
                print "Plus link only: $agent\n";
                $plusLinkOnly++;
            }
        } else {
            print "No link: $agent\n";
            $noHttp++;
        }
    } else {
        print "Non-standard: $agent\n";
        $nonStandard++;
    }
}

print "
Total: $total
Standard: $standard
Non-standard: $nonStandard
No link: $noHttp
With link: $http
Plus link: $plusHttp
Plain link: $noPlusHttp
Plus link only: $plusLinkOnly
Plain link only: $linkOnly
";

아주 좋은 답변입니다! 나는 더하기가 더 일반적이라고 생각했지만 분명히 나는 ​​틀렸다. 이것은 내가 필요한지 여부에 대한 질문에 대답하지만 아직 어디에서 왔는지는 대답하지 않습니다.
jlh

내 생각에 Googlebot과 같은 매우 활동적인 거미가 그것을 시작했고 다른 개발자가 형식을 복사했다고 생각합니다. Googlebot은 확실히 그것을 사용하지만 처음 사용하지는 않았을 것입니다.
Stephen Ostermiller

좋은 의견-통계와 분석에 감사드립니다
NetConstructor.com

그러나 당신은 그 질문에 대답하지 않았습니다.
Jürgen Paul
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.