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


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 相关文章推荐
浅谈Django REST Framework限速
Dec 12 Python
浅谈Python中的作用域规则和闭包
Mar 20 Python
Python 中导入csv数据的三种方法
Nov 01 Python
python实现停车管理系统
Nov 30 Python
解决django前后端分离csrf验证的问题
Feb 03 Python
python UDP(udp)协议发送和接收的实例
Jul 22 Python
python输出带颜色字体实例方法
Sep 01 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
Apr 08 Python
Python OrderedDict字典排序方法详解
May 21 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
Nov 30 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
解决pytorch 数据类型报错的问题
Mar 03 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正则匹配文章中的远程图片地址并下载图片至本地
2015/09/29 PHP
PHP开发制作一个简单的活动日程表Calendar
2016/06/20 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
js 匿名调用实现代码
2009/06/19 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
Jquery submit()无法提交问题
2013/04/21 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
2015/03/23 Javascript
分享jQuery插件的学习笔记
2016/01/14 Javascript
JS实现的仿QQ空间图片弹出效果代码
2016/02/23 Javascript
JavaScript常用字符串与数组扩展函数小结
2016/04/24 Javascript
Windows 系统下设置Nodejs NPM全局路径
2016/04/26 NodeJs
原生javascript实现分享到朋友圈功能 支持ios和android
2016/05/11 Javascript
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
详解AngularJS 过滤器的使用
2018/06/02 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
2018/07/06 Javascript
javaScript实现游戏倒计时功能
2018/11/17 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
seajs和requirejs模块化简单案例分析
2019/08/26 Javascript
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
python输入多行字符串的方法总结
2019/07/02 Python
python采集百度搜索结果带有特定URL的链接代码实例
2019/08/30 Python
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
夜大毕业自我鉴定
2013/10/11 职场文书
出国留学自荐信
2013/10/25 职场文书
学校节能宣传周活动总结
2014/07/09 职场文书
党员批评与自我批评思想汇报
2014/10/08 职场文书
黄石寨导游词
2015/02/05 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
Python 数据可视化神器Pyecharts绘制图像练习
2022/02/28 Python