Dấu cộng trước URL trong tác nhân người dùng


10

Tôi chạy một trình thu thập dữ liệu web nhỏ và phải quyết định sử dụng tác nhân người dùng nào cho nó. Danh sách các tác nhân trình thu thập thông tin cũng như Wikipedia đề xuất định dạng sau:

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

Tuy nhiên, một số bot bỏ qua dấu cộng phía trước URL. Và tôi tự hỏi nó có nghĩa gì ở nơi đầu tiên, nhưng không thể tìm thấy bất kỳ lời giải thích nào. RFC 2616 coi mọi thứ trong ngoặc đơn là một nhận xét và không giới hạn định dạng của nó. Tuy nhiên, thông thường các trình duyệt có danh sách mã thông báo được phân tách bằng dấu chấm phẩy trong nhận xét quảng cáo phiên bản và khả năng của trình duyệt. Tôi không nghĩ rằng điều này được chuẩn hóa theo bất kỳ cách nào khác với hầu hết các trình duyệt định dạng tương tự. Và tôi không thể tìm thấy bất cứ điều gì liên quan đến URL trong bình luận.

Câu hỏi của tôi là: Tại sao dấu cộng? Tôi có cần nó không?

Câu trả lời:


6

Cách sử dụng đầu tiên mà tôi có thể tìm thấy là với trình thu thập thông tin Heritrix . Trong tài liệu hướng dẫn này , tôi tìm thấy như sau:

6.3.1.3.2. user-agent Mẫu ban đầu của tác nhân người dùng mà bạn nhìn thấy khi mới bắt đầu heritrix sẽ trông giống như sau:

Mozilla / 5.0 (tương thích; heritrix / 0.11.0 + PRO DỰ_URL_HERE

Bạn phải thay đổi ít nhất PRO DỰ_URL_HERE và đặt một trang web mà quản trị viên web có thể truy cập để xem thông tin về tổ chức hoặc người đang thu thập dữ liệu.

Chuỗi tác nhân người dùng phải tuân thủ định dạng sau:

[văn bản tùy chọn] ([văn bản tùy chọn] + PRO DỰ_URL [văn bản tùy chọn]) [văn bản tùy chọn]

Dấu ngoặc đơn và dấu cộng trước URL phải có mặt. Các ví dụ khác về tác nhân người dùng hợp lệ sẽ bao gồm:

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

Mozilla / 5.0 (tương thích; bush-crawler + http://whitehouse.gov)

Mozilla / 5.0 (tương thích; os-heritrix / 0.11.0 + http://loc.govthay mặt cho Thư viện Quốc hội)


5

Tôi đã tải xuống tất cả các tác nhân người dùng từ http://www.user-agents.org/ và chạy một đoạn script để đếm số lượng chúng sử dụng các +liên kết kiểu so với các liên kết đơn giản. Tôi đã loại trừ các chuỗi tác nhân người dùng "không chuẩn" không khớp với RFC 2616.

Đây là kết quả:

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

Vì vậy, trong số 673 tác nhân người dùng bao gồm một liên kết chỉ có 21% bao gồm cộng. Trong số 260 tác nhân người dùng có một nhận xét chỉ là một liên kết, chỉ có 33% bao gồm điểm cộng.

Dựa trên phân tích này, điểm cộng là phổ biến, nhưng phần lớn các tác nhân người dùng chọn không sử dụng nó. Nó là tốt để bỏ nó ra, nhưng nó là đủ phổ biến rằng nó cũng sẽ tốt để bao gồm nó.

Đây là kịch bản Perl đã thực hiện phân tích này nếu bạn muốn tự chạy nó.

#!/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
";

Câu trả lời rất hay! Tôi nghĩ rằng điểm cộng là phổ biến hơn, nhưng rõ ràng là tôi đã nhầm. Điều này trả lời câu hỏi liệu tôi có cần nó không, nhưng nó đến từ đâu.
jlh

Tôi đoán là một số nhện rất tích cực như Googlebot đã bắt đầu thực hiện và các nhà phát triển khác đã sao chép định dạng. Googlebot chắc chắn sử dụng nó, nhưng nó có thể không phải là người đầu tiên làm như vậy.
Stephen Ostermiller

bình luận tuyệt vời - cảm ơn về số liệu thống kê và phân tích
NetConstructor.com

Nhưng, bạn đã không trả lời câu hỏi.
Jürgen Paul
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.