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


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时间整形转标准格式的示例分享
Feb 14 Python
python查看FTP是否能连接成功的方法
Jul 30 Python
Python读取mat文件,并转为csv文件的实例
Jul 04 Python
Django models.py应用实现过程详解
Jul 29 Python
Pytorch实现的手写数字mnist识别功能完整示例
Dec 13 Python
python装饰器原理与用法深入详解
Dec 19 Python
Scrapy框架基本命令与settings.py设置
Feb 06 Python
python opencv进行图像拼接
Mar 27 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
Dec 17 Python
Python利用folium实现地图可视化
May 23 Python
python实现简单的井字棋
May 26 Python
Python实现归一化算法详情
Mar 18 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截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
2014/06/10 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
一些javascript一些题目的解析
2010/12/25 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
2013/05/07 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
微信小程序block的使用教程
2018/04/01 Javascript
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
nodejs express配置自签名https服务器的方法
2018/05/22 NodeJs
vant(ZanUi)结合async-validator实现表单验证的方法
2018/12/06 Javascript
js实现黑白div块画空心的图形
2018/12/13 Javascript
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
python如何定义带参数的装饰器
2018/03/20 Python
如何利用python查找电脑文件
2018/04/27 Python
python smtplib发送带附件邮件小程序
2018/05/22 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
Python闭包与装饰器原理及实例解析
2020/04/30 Python
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
Ado与Ado.net的相同与不同
2014/12/08 面试题
北大研究生linux应用求职信
2013/10/29 职场文书
行政文秘岗位职责范本
2014/02/10 职场文书
美术毕业生求职信
2014/02/25 职场文书
法律进企业活动方案
2014/03/04 职场文书
企业文化标语口号
2014/06/09 职场文书
装配车间主任岗位职责
2015/04/08 职场文书
三国演义读书笔记
2015/06/25 职场文书
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python
详解Spring Security中的HttpBasic登录验证模式
2022/03/17 Java/Android