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


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中变量交换的例子
Aug 25 Python
Python简单读取json文件功能示例
Nov 30 Python
python函数式编程学习之yield表达式形式详解
Mar 25 Python
python 实现语音聊天机器人的示例代码
Dec 02 Python
对python PLT中的image和skimage处理图片方法详解
Jan 10 Python
django使用haystack调用Elasticsearch实现索引搜索
Jul 24 Python
JupyterNotebook设置Python环境的方法步骤
Dec 03 Python
python之MSE、MAE、RMSE的使用
Feb 24 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
Apr 17 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
Jun 05 Python
常用的Python代码调试工具总结
Jun 23 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
Jun 28 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
PHP5中的this,self和parent关键字详解教程
2007/03/19 PHP
真正的ZIP文件操作类(php)
2007/07/21 PHP
如何在php中正确的使用json
2013/08/06 PHP
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
PHPExcel在linux环境下导出报500错误的解决方法
2017/01/26 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
javascript中运用闭包和自执行函数解决大量的全局变量问题
2010/12/30 Javascript
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
深入理解javascript中的立即执行函数(function(){…})()
2014/06/12 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
AngularJS执行流程详解
2017/02/17 Javascript
Node.js中的http请求客户端示例(request client)
2017/05/04 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
2017/10/09 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
2018/05/04 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
深入浅析js原型链和vue构造函数
2018/10/25 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
浅谈vue-props的default写不写有什么区别
2020/08/09 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
python抽象基类用法实例分析
2015/06/04 Python
Python中文竖排显示的方法
2015/07/28 Python
Django中Model的使用方法教程
2018/03/07 Python
Django中的Model操作表的实现
2018/07/24 Python
Pytorch 神经网络—自定义数据集上实现教程
2020/01/07 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
美国诺德斯特龙百货官网:Nordstrom
2016/08/23 全球购物
德国奢侈品网上商城:Mytheresa
2016/08/24 全球购物
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
Java程序员常见面试题
2015/07/16 面试题
办公室内勤工作职责
2013/12/11 职场文书
名人演讲稿范文
2014/09/16 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书
matplotlib画混淆矩阵与正确率曲线的实例代码
2021/06/01 Python
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL