2013-11-14 57 views
6

如何使用PHP檢測爬蟲/蜘蛛?如何使用PHP檢測爬蟲/蜘蛛?

我目前工作的一個項目,我需要跟蹤每個履帶式的訪問。
我知道你應該使用HTTP_USER_AGENT,但我真的不知道如何格式化代碼,爲此,我知道,用戶代理可以改變很容易使我也想知道是否有可能增加一些更多的參數,以避免欺騙?什麼,我試圖做

示例代碼..

<?php 
$user_agent = $_SERVER['HTTP_USER_AGENT']; 
if (strpos($user_agent, 'Google') !== false) 
{ 
echo "Googlebot is here"; 
} 
?> 

謝謝

+0

您可以輕鬆地找到爬蟲當您檢查Web服務器日誌文件,並期待從一個單一的IP或子網在很短的時間很多要求。 大多數搜索引擎不修改他們的履帶表現得像他們是一個瀏覽器 –

+0

,既然你可以在HTTP_USER_AGENT與REMOTE_ADDR結合起來,比如是不是真的,Googlebot的抓取總是使用主機名googlebot.com。但我如何設置一個腳本,我不知道。問候丹尼斯 – Squeeze

+0

如果你不想讓你網頁抓取,請的robots.txt的 http://de.wikipedia.org/wiki/Robots_Exclusion_Standard 至少一些履帶尊重的robots.txt –

回答

10

根據Verifying Googlebot

您可以驗證一個機器人訪問你的服務器真的是Googlebot(或其他Google用戶代理),它使用反向DNS查找,驗證名稱位於googlebot.com域中,然後使用該Googlebot名稱進行正向DNS查找。如果您擔心垃圾郵件發送者或其他肇事者在聲稱自己是Googlebot的同時訪問您的網站,這非常有用。

例如:

host 66.249.66.1
1.66.249.66.in-addr.arpa domain name pointer
crawl-66-249-66-1.googlebot.com.

host crawl-66-249-66-1.googlebot.com
crawl-66-249-66-1.googlebot.com has address 66.249.66.1
谷歌不會發布IP地址的網站管理員添加到白名單公開名單。這是因爲這些IP地址範圍可能會發生變化,從而導致任何對其進行硬編碼的網站管理員出現問題。識別Googlebot訪問的最佳方式是使用用戶代理(Googlebot)。

你可以做一個反向DNS查找:

function validateGoogleBotIP($ip) { 
    $hostname = gethostbyaddr($ip); //"crawl-66-249-66-1.googlebot.com" 
    return preg_match('/\.googlebot\.com$/i', $hostname); 
} 

if (strpos($_SERVER['HTTP_USER_AGENT'], 'Google') !== false) { 
    if (validateGoogleBotIP($_SERVER['REMOTE_ADDR'])) { 
     echo 'It is ACTUALLY google'; 
    } else { 
     echo 'Someone\'s faking it!'; 
    } 
} else { 
    echo 'Nothing to do with Google'; 
} 
+0

正是我在找什麼。非常感謝您抽出時間幫助我! – Squeeze

+0

@擠壓不客氣。它應該工作(如果沒有,您的主機可能不允許DNS查找)。例如。 codepad.org不會讓我創建一個這樣的演示,因爲它無法查找主機名。但是,這可能只是他們的沙箱。 – h2ooooooo

+0

我目前正在VPS上託管我的網站,所以如果DNS查詢出現任何錯誤,我沒有責任,但我的自我:p再次謝謝你:) – Squeeze