web-dev-qa-db-ja.com

ユーザーエージェントのURLの前にプラスサインイン

小さなWebクローラーを実行し、そのために使用するユーザーエージェントを決定する必要がありました。 クローラーエージェントのリスト および Wikipedia は次の形式を提案します。

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

ただし、一部のボットは、URLの前のプラス記号を省略します。そして、そもそもそれが何を意味するのかと思いますが、説明が見つかりませんでした。 RFC 2616は括弧内のすべてをコメントと見なします で、その形式を制限しません。ただし、ブラウザでは、ブラウザのバージョンと機能をアドバタイズするコメントにセミコロンで区切られたトークンのリストを含めることが一般的です。これは、ほとんどのブラウザが同様にフォーマットする以外の方法で標準化されているとは思いません。また、コメントにはURLに関する情報が見つかりませんでした。

私の質問は:なぜプラス記号なのか?必要ですか?

10
jlh

私が見つけることができたこの最初の使用法は、 Heritrix crawler でした。 このマニュアルドキュメント で、次のことがわかりました。

6.3.1.3.2。 user-agent heritrixを最初に起動したときに表示される最初のユーザーエージェントテンプレートは、次のようになります。

Mozilla/5.0(互換性、heritrix/0.11.0 + PROJECT_URL_HERE

少なくともPROJECT_URL_HEREを変更し、ウェブマスターがクロールを実行している組織または個人に関する情報を表示するためにアクセスできるWebサイトを配置する必要があります。

ユーザーエージェント文字列は、次の形式に従う必要があります。

[optional-text]([optional-text] + PROJECT_URL [optional-text])[optional-text]

URLの前に括弧とプラス記号が存在する必要があります。有効なユーザーエージェントの他の例は次のとおりです。

my-heritrix-crawler(+ http://mywebsite.com

Mozilla/5.0(互換性、ブッシュクローラー+ http://whitehouse.gov

Mozilla/5.0(互換性;議会図書館に代わってos-heritrix/0.11.0 + http://loc.gov

6
Brendon

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

そのため、リンクを含む673のユーザーエージェントのうち、プラスを含むのは21%だけです。 justリンクであるコメントを持つ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
";
5