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


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中几个比较常见的名词解释
Jul 04 Python
Python实现的多线程同步与互斥锁功能示例
Nov 30 Python
Python Logging 日志记录入门学习
Jun 02 Python
利用python对Excel中的特定数据提取并写入新表的方法
Jun 14 Python
Python重新加载模块的实现方法
Oct 16 Python
在Python3 numpy中mean和average的区别详解
Aug 24 Python
Win10+GPU版Pytorch1.1安装的安装步骤
Sep 27 Python
python读写Excel表格的实例代码(简单实用)
Dec 19 Python
python数据类型可变不可变知识点总结
Mar 06 Python
Python任务调度模块APScheduler使用
Apr 15 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
May 22 Python
Python中的None与 NULL(即空字符)的区别详解
Sep 24 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上传图片存入数据库示例分享
2014/03/11 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
2014/11/05 PHP
php中$_POST与php://input的区别实例分析
2015/01/07 PHP
教你在PHPStorm中配置Xdebug
2015/07/27 PHP
程序员的表白神器“520”大声喊出来
2016/05/20 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
js下用层来实现select的title提示属性
2010/02/23 Javascript
js 可拖动列表实现代码
2011/12/13 Javascript
下拉列表select 由左边框移动到右边示例
2013/12/04 Javascript
使用jsonp完美解决跨域问题
2014/11/27 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
Bootstrap每天必学之折叠
2016/04/12 Javascript
js数组去重的hash方法
2016/12/22 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
Node.js成为Web应用开发最佳选择的原因
2018/02/05 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
Vue 如何使用props、emit实现自定义双向绑定的实现
2020/06/05 Javascript
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
Django 根据数据模型models创建数据表的实例
2018/05/27 Python
对numpy中的数组条件筛选功能详解
2018/07/02 Python
在keras中对单一输入图像进行预测并返回预测结果操作
2020/07/09 Python
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
乡镇四风对照检查材料
2014/08/31 职场文书
工作检讨书怎么写
2014/10/10 职场文书
城南旧事读书笔记
2015/06/29 职场文书
新教师2015年度工作总结
2015/07/22 职场文书
2015小学新教师个人工作总结
2015/10/14 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
idea编译器vue缩进报错问题场景分析
2021/07/04 Vue.js
JavaScript最完整的深浅拷贝实现方式详解
2022/02/28 Javascript
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android