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


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 相关文章推荐
Pandas:DataFrame对象的基础操作方法
Jun 07 Python
Python OpenCV处理图像之图像直方图和反向投影
Jul 10 Python
利用pyuic5将ui文件转换为py文件的方法
Jun 19 Python
kali中python版本的切换方法
Jul 11 Python
wxPython色环电阻计算器
Nov 18 Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 Python
python文件和文件夹复制函数
Feb 07 Python
Windows 下python3.8环境安装教程图文详解
Mar 11 Python
如何查看Django ORM执行的SQL语句的实现
Apr 20 Python
django 外键创建注意事项说明
May 20 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
Jun 23 Python
浅谈优化Django ORM中的性能问题
Jul 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
PHP小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
PHP获取文件的MD5值并判断是否被修改的例子
2014/06/19 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
PHP 断点续传实例详解
2017/11/11 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
jQuery表单验证插件formValidator(改进版)
2012/02/03 Javascript
JavaScript获取和设置CheckBox状态的简单方法
2013/07/05 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
浅谈JavaScript中的字符编码转换问题
2015/07/07 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
Javascript typeof与instanceof的区别
2016/10/18 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
原生js实现3D轮播图
2020/03/21 Javascript
[44:50]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 TNC vs VG
2018/04/02 DOTA
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
python搜索指定目录的方法
2015/04/29 Python
Python字符串格式化
2015/06/15 Python
详解C++编程中一元运算符的重载
2016/01/19 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
python2.x实现人民币转大写人民币
2018/06/20 Python
python 并发编程 多路复用IO模型详解
2019/08/20 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
pytorch自定义二值化网络层方式
2020/01/07 Python
python3利用Axes3D库画3D模型图
2020/03/25 Python
python如何使用代码运行助手
2020/07/03 Python
基于Python正确读取资源文件
2020/09/14 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
CSS实现鼠标滑过鼠标点击代码写法
2016/12/26 HTML / CSS
Html5页面二次分享的实现
2018/07/30 HTML / CSS
工程管理专业个人求职信范文
2013/12/07 职场文书
在校大学生的职业生涯规划书
2014/03/14 职场文书
2014向国旗敬礼网上签名活动总结
2014/09/27 职场文书
文明医院的标语集锦!
2019/07/24 职场文书
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python