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


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实现给字典添加条目的方法
Sep 25 Python
Python类的多重继承问题深入分析
Nov 09 Python
numpy.random.seed()的使用实例解析
Feb 03 Python
Python安装图文教程 Pycharm安装教程
Mar 27 Python
python爬虫框架scrapy实现模拟登录操作示例
Aug 02 Python
Python 输入一个数字判断成绩分数等级的方法
Nov 15 Python
对Python3 goto 语句的使用方法详解
Feb 16 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
Feb 17 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
Jun 02 Python
python如何建立全零数组
Jul 19 Python
Django celery异步任务实现代码示例
Nov 26 Python
Python+Appium自动化测试的实战
Jun 30 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执行zip与rar解压缩方法实现代码
2010/12/05 PHP
php权重计算方法代码分享
2014/01/09 PHP
php获取twitter最新消息的方法
2015/04/14 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
JavaScript中的cacheStorage使用详解
2015/07/29 Javascript
Vue.js路由组件vue-router使用方法详解
2016/12/02 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
原生JS实现轮播图效果
2018/10/12 Javascript
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
解决vue单页面应用进入页面加载所有 js 的问题
2020/08/12 Javascript
OpenLayers3实现测量功能
2020/09/25 Javascript
python使用fcntl模块实现程序加锁功能示例
2017/06/23 Python
Pyinstaller将py打包成exe的实例
2018/03/31 Python
python实现在pandas.DataFrame添加一行
2018/04/04 Python
python3获取两个日期之间所有日期,以及比较大小的实例
2018/04/08 Python
Python selenium实现微博自动登录的示例代码
2018/05/16 Python
详解Python对JSON中的特殊类型进行Encoder
2019/07/15 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
Python守护进程实现过程详解
2020/02/10 Python
Move Free官方海外旗舰店:美国骨关节健康专业品牌
2017/12/06 全球购物
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
财务管理职业生涯规划范文
2013/12/27 职场文书
一体化教学实施方案
2014/05/10 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
楚门的世界观后感
2015/06/03 职场文书
催款函范文
2015/06/24 职场文书