如何準確判斷請求是搜索引擎爬蟲(蜘蛛)發出的請求?

網站經常會被各種爬蟲光顧,有的是搜索引擎爬蟲,有的不是,通常情況下這些爬蟲都有UserAgent,而我們知道UserAgent是可以僞裝的,UserAgent的本質是Http請求頭中的一個選項設置,通過編程的方式可以給請求設置任意的UserAgent。 

所以通過UserAgent判斷請求的發起者是否是搜索引擎爬蟲(蜘蛛)的方式是不靠譜的,更靠譜的方法是通過請求者的ip對應的host主機名是否是搜索引擎自己家的host的方式來判斷。

要獲得ip的host,在windows下可以通過nslookup命令,在linux下可以通過host命令來獲得,例如:

這裏我在windows下執行了nslookup ip 的命令,從上圖可以看到這個ip的主機名是crawl-66-249-64-119.googlebot.com。 這說明這個ip是一個google爬蟲,google爬蟲的域名都是 xxx.googlebot.com.

我們也可以通過python程序的方式來獲得ip的host信息,代碼如下:

import socket
def getHost(ip):
    try:
        result=socket.gethostbyaddr(ip)
        if result: return result[0], None
    except socket.herror,e:
        return None, e.message

上述代碼使用了socket模塊的gethostbyaddr的方法獲得ip地址的主機名。

常用蜘蛛的域名都和搜索引擎官網的域名相關,例如:

  • 百度的蜘蛛通常是baidu.com或者baidu.jp的子域名
  • google爬蟲通常是googlebot.com的子域名
  • 微軟bing搜索引擎爬蟲是search.msn.com的子域名
  • 搜狗蜘蛛是crawl.sogou.com的子域名

基於以上原理,我寫了一個工具頁面提供判斷ip是否是真實搜索引擎的工具頁面,該頁面上提供了網頁判斷的工具和常見的google和bing的搜索引擎爬蟲的ip地址。

頁面地址:http://outofmemory.cn/tools/is-search-engine-spider-ip/ 

本文提供的代碼是python代碼,通過JAVA代碼也是可以實現的,原理是一樣的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章