2009-01-08 41 views
16

我正在爲我的用戶構建統計信息,並且不希望計算機器人的訪問次數。如何使用php識別機器人?

現在我每次頁面被調用時有一個基本的PHP與MySQL增加1。

但機器人也添加到計數。

有沒有人可以想辦法?

主要是隻是主要的東西搞砸了。谷歌,雅虎,MSN等

回答

9

您應該按照用戶代理字符串進行過濾。您可以在這裏找到約300個常見用戶代理的列表:http://www.robotstxt.org/db.html在運行SQL語句之前遍歷該列表並忽略bot用戶代理應該可以解決您的問題。

如果您不希望搜索引擎甚至到達頁面,請使用基本的robots.txt文件來阻止它們。

0

您是否嘗試過使用它們的用戶代理信息識別他們?一個簡單的谷歌搜索應該給你谷歌等使用的用戶代理。

這當然不是萬無一失的,但大多數公司的爬蟲提供不同的用戶代理。

編輯:假設你不想限制機器人訪問,但只是不計算它在你的statistc訪問。

2

在增加頁面查看次數之前檢查user agent,但請記住這可能是欺騙性的。 PHP公開用戶代理$_SERVER['HTTP_USER_AGENT'],假設Web服務器爲其提供此信息。有關$_SERVER的更多信息,請參閱http://www.php.net/manual/en/reserved.variables.server.php

你可以找到http://www.user-agents.org用戶代理的列表;谷歌搜索也將提供屬於主要提供者的名稱。第三個可能的來源是你的Web服務器的訪問日誌,如果你可以聚合它們。

22

您可以檢查用戶代理字符串,空字符串或包含'robot','spider','crawler','curl'的字符串可能是機器人。

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

+6

非常有用。如果用** bot **替換** robot **以匹配其中一個最活躍的機器人,則更爲有用:「Mozilla/5.0(兼容; Googlebot/2.1; + http://www.google.com/bot。 html)` – 2013-12-30 02:06:39

6

我們還有一類似用途的情況下給自己,並選擇一個我們最近發現非常有幫助的是user-agent-string.infoUASParser class

這是一個PHP類拉最新的一組用戶代理字符串的定義和本地緩存他們。該類可以配置爲按照您認爲合適的頻率或罕見頻率提取定義。像這樣自動獲取它們意味着您不必對bot用戶代理或市場上的新用戶進行各種更改,儘管您依賴UAS.info來準確執行此操作。

當這個類被調用時,它解析當前訪問者的用戶代理並返回一個關聯數組來分解組成部分,例如,當UA被確定爲有可能屬於人類訪客,在這種情況下,您可以更新您的統計

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 
) 

typ設置爲browser。需要注意的地方

夫婦在這裏:

  • 你依靠UAS.info用於提供準確且最新
  • 搜索引擎谷歌和雅虎宣佈自己在用戶代理字符串自己用戶代理字符串,但是這種方法仍然會計算假裝爲人類訪問者的機器人的訪問(發送欺騙性UA)
  • 由於上面提到的@amdfan,通過robots.txt攔截機器人應阻止大多數人訪問您的頁面。如果您需要將內容編入索引但不增加統計信息,那麼robots.txt方法將不是一個現實的選項