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


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 相关文章推荐
使用cx_freeze把python打包exe示例
Jan 24 Python
python开发之thread线程基础实例入门
Nov 11 Python
python实现简单socket通信的方法
Apr 19 Python
python装饰器初探(推荐)
Jul 21 Python
详解pytorch 0.4.0迁移指南
Jun 16 Python
Python+OpenCV实现实时眼动追踪的示例代码
Nov 11 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 Python
Django框架教程之中间件MiddleWare浅析
Dec 29 Python
使用PyTorch实现MNIST手写体识别代码
Jan 18 Python
numpy实现RNN原理实现
Mar 02 Python
python使用pygame创建精灵Sprite
Apr 06 Python
Python爬虫:从m3u8文件里提取小视频的正确操作
May 14 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
COM in PHP (winows only)
2006/10/09 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
简单谈谈javascript代码复用模式
2015/01/28 Javascript
使用JavaScript实现旋转的彩圈特效
2015/06/23 Javascript
jQuery实现判断滚动条到底部
2015/06/23 Javascript
jqTransform美化表单
2015/10/10 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
jquery操作select元素和option的实例代码
2016/02/03 Javascript
javascript实现随机生成DIV背景色
2016/06/20 Javascript
浅谈Nodejs中的作用域问题
2016/12/26 NodeJs
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
pageGroup.js实现分页功能
2019/07/27 Javascript
一步一步实现Vue的响应式(对象观测)
2019/09/02 Javascript
JQuery样式与属性设置方法分析
2019/12/07 jQuery
angular中的post请求处理示例详解
2020/06/30 Javascript
深入分析在Python模块顶层运行的代码引起的一个Bug
2014/07/04 Python
python实现调用其他python脚本的方法
2014/10/05 Python
探究python中open函数的使用
2016/03/01 Python
详解python并发获取snmp信息及性能测试
2017/03/27 Python
python模拟事件触发机制详解
2018/01/19 Python
Python爬虫入门有哪些基础知识点
2020/06/02 Python
Python 利用OpenCV给照片换底色的示例代码
2020/08/03 Python
用CSS3的box-reflect来制作倒影效果
2016/11/15 HTML / CSS
社区庆八一活动方案
2014/02/02 职场文书
中专生毕业个人鉴定
2014/02/26 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
网球场地租赁协议范本
2014/10/07 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP
SQL SERVER实现连接与合并查询
2022/02/24 SQL Server