18

ユーザーの統計を作成していますが、ボットからの訪問をカウントしたくありません。

これで、ページが呼び出されるたびに mysql が 1 ずつ増える基本的な php ができました。

ただし、ボットもカウントに追加されます。

誰でも方法を考えることができますか?

主に、物事を台無しにする主要なものです。Google、Yahoo、Msn など。

4

7 に答える 7

24

ユーザー エージェント文字列、空の文字列、または「robot」、「spider」、「crawler」、「curl」を含む文字列がロボットである可能性があることを確認できます。

preg_match('/robot|spider|crawler|curl|^$/i', $_SERVER['HTTP_USER_AGENT']));

于 2009-01-08T02:07:32.600 に答える
10

ユーザーエージェント文字列でフィルタリングする必要があります。ここで、ボットによって提供される約 300 の一般的なユーザー エージェントのリストを見つけることができます。すべての実用的な目的のために。

検索エンジンがページに到達することさえ望まない場合は、基本的なrobots.txtファイルを使用してそれらをブロックします。

于 2009-01-08T02:04:02.123 に答える
6

あなたと同様の使用例がありますが、最近非常に役立つことがわかったオプションの 1 つは、 user-agent-string.info のUASParserクラスです。

これは、ユーザー エージェント文字列定義の最新セットを取得してローカルにキャッシュする PHP クラスです。クラスは、必要に応じて定義をプルするように構成できます。このように自動的に取得するということは、ボット ユーザー エージェントのさまざまな変更や、市場に出回っている新しい変更を把握しておく必要がないことを意味しますが、これを正確に行うために UAS.info に依存しています。

クラスが呼び出されると、現在の訪問者のユーザー エージェントを解析し、構成要素を分割した連想配列を返します。

Array
(
    [typ] => browser
    [ua_family] => Firefox
    [ua_name] => Firefox 3.0.8
    [ua_url] => http://www.mozilla.org/products/firefox/
    [ua_company] => Mozilla Foundation
    ........
    [os_company] => Microsoft Corporation.
    [os_company_url] => http://www.microsoft.com/
    [os_icon] => windowsxp.png
)

UA が人間の訪問者のものである可能性が高いと識別された場合、このフィールドtypは に設定されます。この場合、統計を更新できます。browser

ここでいくつかの注意事項:

  • 提供されるユーザー エージェント文字列が正確かつ最新であることを UAS.info に依存しています。
  • google や yahoo などのボットは、ユーザー エージェント文字列で自分自身を宣言しますが、この方法でも、人間の訪問者のふりをしているボット (スプーフィングされた UA を送信する) からの訪問をカウントします。
  • 上記の@amdfanのように、robots.txt を介してボットをブロックすると、ほとんどのボットがページにアクセスできなくなります。コンテンツをインデックス化する必要があるが、統計を増やす必要がない場合、robots.txt メソッドは現実的なオプションではありません。
于 2011-04-20T09:06:37.233 に答える
2

ページ ビュー カウントを増やす前にユーザー エージェントを確認してください。ただし、これはなりすましの可能性があることに注意してください。PHP は$_SERVER['HTTP_USER_AGENT']、Web サーバーがユーザー エージェントにこの情報を提供すると仮定して、ユーザー エージェントを に公開します。詳細について$_SERVERは、http://www.php.net/manual/en/reserved.variables.server.phpを参照してください。

ユーザー エージェントのリストはhttp://www.user-agents.orgにあります。グーグルは、主要なプロバイダーに属するものの名​​前も提供します。3 番目に考えられるソースは、Web サーバーのアクセス ログを集計できる場合です。

于 2009-01-08T02:06:16.160 に答える
0

ユーザーエージェント情報でそれらを識別しようとしましたか? 簡単な Google 検索で、Google などで使用されているユーザー エージェントが得られるはずです。

もちろん、これは絶対確実というわけではありませんが、大手企業のほとんどのクローラーは、個別のユーザー エージェントを提供しています。

編集:ボットのアクセスを制限したくないが、統計でその訪問をカウントしないと仮定します。

于 2009-01-08T02:03:14.277 に答える
0

この機能は私には機能し、https ://www.cult-f.net/detect-crawlers-with-php/ Web サイトで見つけました。

<?php
  $crawlers = array(
    'Google'=>'Google',
    'MSN' => 'msnbot',
    'Rambler'=>'Rambler',
    'Yahoo'=> 'Yahoo',
    'AbachoBOT'=> 'AbachoBOT',
    'accoona'=> 'Accoona',
    'AcoiRobot'=> 'AcoiRobot',
    'ASPSeek'=> 'ASPSeek',
    'CrocCrawler'=> 'CrocCrawler',
    'Dumbot'=> 'Dumbot',
    'FAST-WebCrawler'=> 'FAST-WebCrawler',
    'GeonaBot'=> 'GeonaBot',
    'Gigabot'=> 'Gigabot',
    'Lycos spider'=> 'Lycos',
    'MSRBOT'=> 'MSRBOT',
    'Altavista robot'=> 'Scooter',
    'AltaVista robot'=> 'Altavista',
    'ID-Search Bot'=> 'IDBot',
    'eStyle Bot'=> 'eStyle',
    'Scrubby robot'=> 'Scrubby',
    );
 
function crawlerDetect($USER_AGENT)
{
    // to get crawlers string used in function uncomment it
    // it is better to save it in string than use implode every time
    // global $crawlers
    // $crawlers_agents = implode('|',$crawlers);
    $crawlers_agents = 'Google|msnbot|Rambler|Yahoo|AbachoBOT|accoona|AcioRobot|ASPSeek|CocoCrawler|Dumbot|FAST-WebCrawler|GeonaBot|Gigabot|Lycos|MSRBOT|Scooter|AltaVista|IDBot|eStyle|Scrubby';
 
    if ( strpos($crawlers_agents , $USER_AGENT) === false )
       return false;
    // crawler detected
    // you can use it to return its name
    /*
    else {
       return array_search($USER_AGENT, $crawlers);
    }
    */
}
 
// example
 
$crawler = crawlerDetect($_SERVER['HTTP_USER_AGENT']);
 
if ($crawler )
{
   // it is crawler, it's name in $crawler variable
}
else
{
   // usual visitor
}

于 2020-08-03T01:22:35.757 に答える