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


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 k-近邻算法实例分享
Jun 11 Python
在Django的URLconf中使用多个视图前缀的方法
Jul 18 Python
python的unittest测试类代码实例
Dec 07 Python
django框架自定义用户表操作示例
Aug 07 Python
浅谈Python 列表字典赋值的陷阱
Jan 20 Python
Python实现Linux监控的方法
May 16 Python
python中字符串数组逆序排列方法总结
Jun 23 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
PyQt+socket实现远程操作服务器的方法示例
Aug 22 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
Dec 10 Python
Pytorch 实现权重初始化
Dec 31 Python
python连接PostgreSQL过程解析
Feb 09 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
数据库的日期格式转换
2006/10/09 PHP
php中apc缓存使用示例
2013/12/25 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
2016/02/14 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
PHP+JavaScript实现无刷新上传图片
2017/02/21 PHP
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
2011/10/21 Javascript
推荐6款基于jQuery实现图片效果插件
2014/12/07 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
JS Array创建及concat()split()slice()的使用方法
2016/06/03 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
jQuery简单创建节点的方法
2016/09/09 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
python实现字符串完美拆分split()的方法
2019/07/16 Python
Python 动态导入对象,importlib.import_module()的使用方法
2019/08/28 Python
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
css3弹性盒子flex实现三栏布局的实现
2020/11/12 HTML / CSS
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
澳大利亚拥有最好的家具和家居用品在线目的地:Nestz
2019/02/23 全球购物
致裁判员加油稿
2014/02/08 职场文书
期中考试反思800字
2014/05/01 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
2014年节能减排工作总结
2014/12/06 职场文书
荒岛余生观后感
2015/06/09 职场文书
全民创业工作总结
2015/08/13 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
Python制作表白爱心合集
2022/01/22 Python