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


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随机生成一个6位的验证码代码分享
Mar 24 Python
浅谈Python中的数据类型
May 05 Python
Python统计文件中去重后uuid个数的方法
Jul 30 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
May 31 Python
Python给你的头像加上圣诞帽
Jan 04 Python
Python使用pymysql从MySQL数据库中读出数据的方法
Jul 25 Python
python绘制漏斗图步骤详解
Mar 04 Python
Python自动化导出zabbix数据并发邮件脚本
Aug 16 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 Python
python 用pandas实现数据透视表功能
Dec 21 Python
Python tkinter之Bind(绑定事件)的使用示例
Feb 05 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
星际争霸兵种名称对照表
2020/03/04 星际争霸
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
php封装的图片(缩略图)处理类完整实例
2016/10/19 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
微信小程序 出现错误:{"baseresponse":{"errcode":-80002,"errmsg":""}}解决办法
2017/02/23 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
JQuery常用简单动画操作方法回顾与总结
2019/12/07 jQuery
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
JavaScript实现alert弹框效果
2020/11/19 Javascript
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
Python File readlines() 使用方法
2018/03/19 Python
python3实现windows下同名进程监控
2018/06/21 Python
python控制nao机器人身体动作实例详解
2019/04/29 Python
Django 表单模型选择框如何使用分组
2019/05/16 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
python 在sql语句中使用%s,%d,%f说明
2020/06/06 Python
用python实现一个简单计算器(完整DEMO)
2020/10/14 Python
anaconda升级sklearn版本的实现方法
2021/02/22 Python
pip install命令安装扩展库整理
2021/03/02 Python
CSS3线性渐变简单实现以及该属性在浏览器中的不同
2012/12/12 HTML / CSS
法国在线药房:DoctiPharma
2020/10/21 全球购物
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
公司聘任书模板
2014/03/29 职场文书
《美丽的丹顶鹤》教学反思
2014/04/22 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书
浅谈redis整数集为什么不能降级
2021/07/25 Redis
python基础之类属性和实例属性
2021/10/24 Python
基于docker安装zabbix的详细教程
2022/06/05 Servers