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


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 获取文件列表(或是目录例表)
Mar 25 Python
Python批量修改文件后缀的方法
Jan 26 Python
Python and、or以及and-or语法总结
Apr 14 Python
Django框架实现逆向解析url的方法
Jul 04 Python
Atom的python插件和常用插件说明
Jul 08 Python
Django框架的中的setting.py文件说明详解
Oct 15 Python
QML用PathView实现轮播图
Jun 03 Python
Python读写压缩文件的方法
Jul 30 Python
Python变量格式化输出实现原理解析
Aug 06 Python
Python列表嵌套常见坑点及解决方案
Sep 30 Python
Python数据可视化常用4大绘图库原理详解
Oct 23 Python
PyQt5 QThread倒计时功能的实现代码
Apr 02 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
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
PHP 中执行排序与 MySQL 中排序
2009/04/21 PHP
php 缩略图实现函数代码
2011/06/23 PHP
基于curl数据采集之单页面采集函数get_html的使用
2013/04/28 PHP
Chrome扩展页面动态绑定JS事件提示错误
2014/02/11 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
javascript特效实现——当前时间和倒计时效果的简单实例
2016/07/20 Javascript
针对JavaScript中this指向的简单理解
2016/08/26 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
移动端刮刮乐的实现方式(js+HTML5)
2017/03/23 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
Javascript实现时间倒计时效果
2017/07/15 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
Angular 数据请求的实现方法
2018/05/07 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
微信小程序 弹窗输入组件的实现解析
2019/08/12 Javascript
使用flow来规范javascript的变量类型
2019/09/12 Javascript
基于JavaScript伪随机正态分布代码实例
2019/11/07 Javascript
巧用python和libnmapd,提取Nmap扫描结果
2016/08/23 Python
Python处理CSV与List的转换方法
2018/04/19 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
Python 读取WAV音频文件 画频谱的实例
2020/03/14 Python
Python简单实现词云图代码及步骤解析
2020/06/04 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
德国苹果商店:MacTrade
2020/05/18 全球购物
优秀医生事迹材料
2014/02/12 职场文书
数学教研活动总结
2014/07/02 职场文书
行政专员岗位职责说明书
2014/09/01 职场文书
离婚协议书样本
2015/01/26 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
Python基础之教你怎么在M1系统上使用pandas
2021/05/08 Python