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


Posted in Python onOctober 13, 2015

网站经常会被各种爬虫光顾,有的是搜索引擎爬虫,有的不是,通常情况下这些爬虫都有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地址。

附带常见搜索引擎蜘蛛的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

ps:https协议网页能够被搜索引擎收录吗

百度现在只能收录少部分的https,大部分的https网页无法收录。

不过我查询了google资料,Google能够比较好地收录https协议的网站。

所以如果你的网站是中文的,而且比较关注搜索引擎自然排名流量这块,建议尽量不要将所有内容都放到https中去加密去。

可考虑的方式是:

1、对于需要加密传递的数据,使用https,比如用户登录以及用户登录后的信息;

2、对于普通的新闻、图片,建议使用http协议来传输;

3、网站首页建议使用http协议的形式。

Python 相关文章推荐
实例讲解python函数式编程
Jun 09 Python
Python入门篇之正则表达式
Oct 20 Python
Python栈类实例分析
Jun 15 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
Aug 18 Python
Python 高级专用类方法的实例详解
Sep 11 Python
python+matplotlib演示电偶极子实例代码
Jan 12 Python
Python文件读写常见用法总结
Feb 22 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
Aug 09 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
Oct 25 Python
Python使用socket_TCP实现小文件下载功能
Oct 09 Python
Python模拟键盘输入自动登录TGP
Nov 27 Python
教你漂亮打印Pandas DataFrames和Series
May 29 Python
Python语法快速入门指南
Oct 12 #Python
初步认识Python中的列表与位运算符
Oct 12 #Python
Python入门学习之字符串与比较运算符
Oct 12 #Python
各个系统下的Python解释器相关安装方法
Oct 12 #Python
Python中数字以及算数运算符的相关使用
Oct 12 #Python
深入解析Python中的变量和赋值运算符
Oct 12 #Python
Python2.x版本中基本的中文编码问题解决
Oct 12 #Python
You might like
PHP分页函数代码(简单实用型)
2010/12/02 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
js 深拷贝函数
2008/12/04 Javascript
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
细说浏览器特性检测(2)-通用事件检测
2010/11/05 Javascript
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
2015/08/18 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
js简单设置与使用cookie的方法
2016/01/22 Javascript
jquery实现左右滑动式轮播图
2017/03/02 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
2017/05/04 jQuery
jQuery实现的鼠标响应缓冲动画效果示例
2018/02/13 jQuery
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
jQuery插件实现弹性运动完整示例
2018/07/07 jQuery
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
解决cordova+vue 项目打包成APK应用遇到的问题
2019/05/10 Javascript
Node.js API详解之 Error模块用法实例分析
2020/05/14 Javascript
基于原生js实现九宫格算法代码实例
2020/07/03 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
详解Appium+Python之生成html测试报告
2019/01/04 Python
基于Python执行dos命令并获取输出的结果
2019/12/30 Python
如何基于Python创建目录文件夹
2019/12/31 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
浅析HTML5的WebSocket与服务器推送事件
2016/02/19 HTML / CSS
自荐信格式范文
2013/10/07 职场文书
化学教师自荐信范文
2013/12/28 职场文书
机工车间主任岗位职责
2014/03/05 职场文书
高中班主任评语大全
2014/04/25 职场文书
社区义诊活动总结
2014/04/30 职场文书
2016预备党员培训心得体会
2016/01/08 职场文书
Go语言的协程上下文的几个方法和用法
2022/04/11 Golang