如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求?

网站经常会被各种爬虫光顾,有的是搜索引擎爬虫,有的不是,通常情况下这些爬虫都有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代码,通过c#代码也是可以实现的,原理是一样的。

附带常见搜索引擎蜘蛛的IP段:

蜘蛛名称 IP地址
Baiduspider
202.108.11.* 220.181.32.* 58.51.95.* 60.28.22.* 61.135.162.* 61.135.163.* 61.135.168.*

YodaoBot
202.108.7.215 202.108.7.220 202.108.7.221

Sogou web spider
219.234.81.* 220.181.61.*

Googlebot
203.208.60.*

Yahoo! Slurp
202.160.181.* 72.30.215.* 74.6.17.* 74.6.22.*

Yahoo ContentMatch Crawler
119.42.226.* 119.42.230.*

Sogou-Test-Spider
220.181.19.103 220.181.26.122

Twiceler
38.99.44.104 64.34.251.9

Yahoo! Slurp China
202.160.178.*

Sosospider 124.115.0.*
CollapsarWEB qihoobot
221.194.136.18

NaverBot
202.179.180.45

Sogou Orion spider
220.181.19.106 220.181.19.74

Sogou head spider
220.181.19.107

SurveyBot
216.145.5.42 64.246.165.160

Yanga WorldSearch Bot v
77.91.224.19 91.205.124.19

baiduspider-mobile-gate
220.181.5.34 61.135.166.31

discobot
208.96.54.70

ia_archiver 209.234.171.42
msnbot
65.55.104.209 65.55.209.86 65.55.209.96

sogou in spider
220.181.19.216

时间: 2024-10-13 23:20:32

如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求?的相关文章

php判断来访者是否是搜索引擎的蜘蛛

我们可以通过HTTP_USER_AGENT来判断是否是蜘蛛,搜索引擎的蜘蛛都有自己的独特标志,下面列取了一部分. function is_crawler() { $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']); $spiders = array( 'Googlebot', // Google 爬虫 'Baiduspider', // 百度爬虫 'Yahoo! Slurp', // 雅虎爬虫 'YodaoBot', // 有道爬虫 'msn

浅谈屏蔽搜索引擎爬虫(蜘蛛)抓取/索引/收录网页的几种思路

网站建设好了,当然是希望网页被搜索引擎收录的越多越好,但有时候我们也会碰到网站不需要被搜索引擎收录的情况. 比如,你要启用一个新的域名做镜像网站,主要用于PPC 的推广,这个时候就要想办法屏蔽搜索引擎蜘蛛抓取和索引我们镜像网站的所有网页.因为如果镜像网站也被搜索引擎收录的话,很有可能会影响官网在搜索引擎的权重,这肯定是我们不想看到的结果. 以下列举了屏蔽主流搜索引擎爬虫(蜘蛛)抓取/索引/收录网页的几种思路.注意:是整站屏蔽,而且是尽可能的屏蔽掉所有主流搜索引擎的爬虫(蜘蛛). 1.通过 rob

python爬虫(二)_HTTP的请求和响应

HTTP和HTTPS HTTP(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收HTML页面的方法 HTTPS(HyperText Transfer Protocol over Secure Socket Layer)简单讲是HTTP的安全版,在HTTP下加入SSL层. SSL(Secure Socket Layer安全套接层)主要用于web的安全传输协议,在传输层对网络连接进行加密,保障在Internet上数据传输的安全. HTTP的端口号为80 HT

Python爬虫(一)_HTTP的请求与响应

HTTP和HTTPS HTTP(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收HTML页面的方法 HTTPS(HyperText Transfer Protocol over Secure Socket Layer)简单讲是HTTP的安全版,在HTTP下加入SSL层. SSL(Secure Socket Layer安全套接层)主要用于web的安全传输协议,在传输层对网络连接进行加密,保障在Internet上数据传输的安全. HTTP的端口号为80 HT

Java开发搜索引擎爬虫

1 package com.peidon.html; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.io.InputStreamReader; 9 import java.net.HttpURLConnectio

C# WebBrowser准确判断网页最终装载完毕

== 最近写了个软件叫WebAutoScript,目的用于,网页的自动操作处理,就是说,所有你在网页上面的操作,都可以录到一个脚本中,然后可以回放这个操作过程..我是说任何过程. 程序是用C#写的,其中遇到了一个难题,对于网页,我是用C#内置的WebBrowser控件控制,但是这个控件有个问题,就是不能准确判断网页什么时候最终装载完毕,如果这个不能判断的话,我根本不可以判断什么时候执行下一个动作,因为网页还没有打开,不可能去点击还没有出现的按钮等...google了海内外,竟然没有人搞定过,除非

防止网页被搜索引擎爬虫和网页采集器收录的方法汇总

来源:脚本之家 http://www.jb51.net/yunying/28470.html 下面的这些方法是可以标本兼治的:1.限制IP地址单位时间的访问次数 分析:没有哪个常人一秒钟内能访问相同网站5次,除非是程序访问,而有这种喜好的,就剩下搜索引擎爬虫和讨厌的采集器了. 弊端:一刀切,这同样会阻止搜索引擎对网站的收录 适用网站:不太依靠搜索引擎的网站 采集器会怎么做:减少单位时间的访问次数,减低采集效率 2.屏蔽ip 分析:通过后台计数器,记录来访者ip和访问频率,人为分析来访记录,屏蔽可

学习——伪类+js实现css3 media queries跨界准确判断

本文转自:http://www.zhangxinxu.com/wordpress/?p=2387 media queries可以让设备在不同尺寸下应用不同的css样式.布局等.以适应手持设备.普屏显示器.宽屏显示器,以及未来冰箱上的联网显示器,汽车上的数码设备等.然后,仅仅通过css做布局可能无法应对所有的交互请求. 举个简单的例子,我们打开浏览器可能处于非最大化状态,此时,如果作为普屏处理,加载的图片可能就是128*128的小尺寸图片.但是,当我们最大化以获得更好阅读体验的时候,需要使用更大尺

尝试java开发搜索引擎爬虫

大家应该也知道百度搜索结果都会有一个百度快照,这是通过缓存服务器调用出来的页面信息,这样我们就可以通过百度快照快速的浏览网页信息,那么这个缓存服务器跟爬虫又有什么联系么? 我们来大致了解一下爬虫的基本原理(个人理解,有错误给予纠正).首先搜索引擎是不会产生内容的,它的信息是通过爬虫把信息检索出来.爬虫通过域名URL获取到源代码,将页面内容存储到缓存服务器上同时建立索引.将下载下来的网页URL放进URL队列中,并记录避免重复抓取.然后在这个队列中检查URL,要是发现还没有被抓取就将这个URL放进待