2010-12-14 30 views
2

我想開發一個非常強大的方法來檢測只有幾個頂級搜索引擎蜘蛛,如谷歌博客,並讓他們訪問我的網站上的內容,否則通常用戶註冊/登錄所需的查看該內容。如何檢測頂級合法搜索引擎機器人?

請注意,我也利用cookie來讓用戶訪問一些內容而無需註冊。因此,如果在客戶端瀏覽器上禁用cookie,則不會提供除首頁外的內容。但我聽說搜索引擎蜘蛛不接受cookies,所以這也會阻止合法的搜索引擎機器人。它是否正確?

我聽說的一個建議是從ip地址進行反向查找,如果它解析爲例如googlebot.com,則執行forward dns查找,如果取回原始ip,則其合法而不是某個冒充爲Googlebot的。我在Linux服務器上使用Java,因此我正在尋找基於Java的解決方案。

我只是放在頂級的好搜索引擎蜘蛛,如谷歌雅虎BINA等,並保持其他人減少服務器負載。但它的非常重要的頂級蜘蛛指數我的網站。

回答

3

對於您的問題的更完整的答案,你不能只依靠一種方法。問題是你想做什麼的衝突性質。基本上你想允許好的機器人訪問你的網站併爲它編制索引,這樣你就可以出現在搜索引擎上;但是你想阻止壞的機器人吸取所有帶寬並竊取你的信息。

的第一道防線:

在您網站的根目錄下創建一個robots.txt文件。有關詳細信息,請參見http://www.robotstxt.org/。這將在網站的最有意義的區域保持良好,行爲良好的機器人。請記住,如果您爲一個機器人與另一個機器人提供不同的行爲,則robots.txt依賴於用戶代理字符串。見防禦http://www.robotstxt.org/db.html

下聯:對用戶代理和/或IP地址

過濾器。我已經因爲暗示這一點而受到批評,但令人驚訝的是,很少機器人掩蓋他們是誰,甚至是壞人。再次,它不會阻止所有不良行爲,但它提供了一定程度的盡職調查。更多關於稍後利用User-Agent的信息。防禦

第三行:

監視Web服務器的訪問日誌。使用日誌分析器來確定大部分流量來自哪裏。這些日誌包括IP地址和用戶代理字符串,因此您可以檢測機器人有多少實例擊中了您,以及它是否真的說出它的名稱:請參閱http://www.robotstxt.org/iplookup.html

您可能必須自己掀起日誌分析器來查找來自不同客戶端的請求速率。超過某個閾值(比如10 /秒)的任何​​事情都將成爲稍後評級限制的候選人。

利用用戶代理替代網站內容:

我們不得不採取保護我們的用戶即使是合法的機器人錘擊我們的網站的一種方法是基於用戶代理分裂交通。基本上,如果用戶代理是一個已知的瀏覽器,他們得到了全功能網站。如果它不是一個已知的瀏覽器,它將被視爲一個機器人,並被賦予一組簡單的HTML文件,只需要他們完成工作所需的元信息和鏈接。殭屍程序的HTML文件每天靜態生成四次,因此沒有處理開銷。您還可以呈現RSS提要,而不是提供相同功能的提取HTML。

最後請注意:

你只有這麼多的資源,而不是每一個合法的機器人表現良好(即忽略robots.txt,並提出了很多壓力的服務器上)。你將不得不隨時更新你的方法。例如,如果一個IP地址變成客戶端(或其客戶端)所做的自定義搜索機器人,您可能不得不限制IP地址的速率,而不是完全阻止它。

基本上,您試圖在爲用戶提供服務和保持網站可用於搜索引擎之間取得良好的平衡。做足夠的事情來保持你的網站對用戶的響應,並且必要時只採取更先進的策略。

0

看看這個網站:

http://www.user-agents.org/

他們也有,你可以下載並納入數據庫的XML版本。他們根據瀏覽器,鏈接/服務器檢查器,下載工具,代理服務器,機器人/蜘蛛/搜索引擎或垃圾郵件/壞機器人對已知的「用戶代理」頭標識進行分類。

注意 我遇到過幾個用戶代理字符串,它們表示有人被黑客一起颳去網站的Java運行時。事實證明,在這種情況下,有人正在自己的搜索引擎刮板,但它也可能是一個蜘蛛下載所有內容的非現場/斷開使用。

+0

任何人都可以將他想要的任何用戶代理放入請求中,所以用UA過濾是沒用的 – 2010-12-14 14:45:25

+0

他問他可以做些什麼來檢測。這是你可以做的事情之一。無論你能做什麼,即使是不好的垃圾郵件機器人也能識別自己。大多數偷偷摸摸的人比改變他們的用戶代理更好一些。 – 2010-12-14 15:40:32

2

我想開發一個非常強大的方法來檢測只有幾個頂級搜索引擎蜘蛛如谷歌機器人,讓他們訪問我的網站上的內容,否則通常用戶註冊/登錄需要查看該內容。

正常的做法是配置一個robots.txt文件以允許所需的抓取工具,並禁止其他工具。當然,這取決於爬蟲遵守規則,但對於那些你不能回退的東西,如用戶代理字符串,IP地址檢查等。

有關「robots.txt」是:

  • 設置起來很簡單。
  • 它對您的網站的影響最小。一個行爲良好的爬行程序將獲取該文件,並且(假設您不允許爬蟲)只能離開。
  • 您可以指定您的網站的哪些部分可以被抓取。

請注意,我也利用cookie來讓用戶訪問一些內容而無需註冊。因此,如果在客戶端瀏覽器上禁用cookie,則不會提供除首頁外的內容。但我聽說搜索引擎蜘蛛不接受cookies,所以這也會阻止合法的搜索引擎機器人。它是否正確?

我相信是的。請參閱Google's view你正在做什麼。

一個建議,我聽到的是從IP地址做反向查找,如果它解析爲例如googlebot.com,然後做一個正向DNS查找,如果找回原來的IP,那麼它的合法的,而不是某一個冒充Googlebot。

它可能會,但它是相當昂貴的。 Robots.txt是一個更簡單的方法,並且易於在第一個實例中實現。

+0

請注意,'robots.txt'文件*僅適用於合法爬網程序。它也*僅*不允許代理商。行爲不檢測的機器人(如許多垃圾郵件機器人和下載抓取工具)將完全忽略robots.txt文件並按照自己的意願進行操作。 – 2010-12-14 15:43:49

+0

@Berin - 我知道。見第二段最後一句。 – 2010-12-14 23:09:52

2

正確的和快速的方法來識別Googlebot的是:

  1. 檢查用戶代理字符串
  2. 如果Googlebot,通過DNS

只有識別Googlebot的工資客戶驗證的IP IP/DNS驗證的一次性價格。假設當然你會在本地緩存每個IP的結果。

對於用戶代理檢查,您可以使用簡單的Java String功能。根據https://support.google.com/webmasters/answer/1061943否則你可以使用這個庫就像userAgent.contains("Googlebot")東西:https://github.com/before/uadetector

關於DNS,這就是谷歌建議https://support.google.com/webmasters/answer/80553

您可以驗證一個機器人訪問您的服務器確實是Googlebot (或其他谷歌用戶代理)通過使用反向DNS查找, 驗證該名稱位於googlebot.com域中,然後使用該Googlebot名稱執行正向DNS查找 。如果您擔心垃圾郵件發件人或其他肇事者正在訪問您的網站 ,並聲稱自己是Googlebot,則此功能非常有用。

例如:

主機66.249.66.1 1.66.249.66.in-addr.arpa域名指針crawl-66-249-66-1.googlebot.com。

主機crawl-66-249-66-1.googlebot.com crawl-66-249-66-1.googlebot.com具有地址66.249.66.1

兵以同樣的方式與bingbot,請參見http://www.bing.com/webmaster/help/how-to-verify-bingbot-3905dc26

因爲我需要同樣的東西,所以我將一些Java代碼放入庫中並在GitHub上發佈:https://github.com/optimaize/webcrawler-verifier它可從Maven Central獲得。下面是一篇描述它的博客文章:http://www.flowstopper.org/2015/04/is-that-googlebot-user-agent-really-from-google.html

相關問題