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


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实现数据库编程方法详解
Jun 09 Python
Python 字符串与二进制串的相互转换示例
Jul 23 Python
使用python实现http及ftp服务进行数据传输的方法
Oct 26 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
如何利用Python开发一个简单的猜数字游戏
Sep 22 Python
Python3 读取Word文件方式
Feb 13 Python
Python Handler处理器和自定义Opener原理详解
Mar 05 Python
python使用matplotlib绘制折线图的示例代码
Sep 22 Python
python图片合成的示例
Nov 09 Python
基于Python的图像阈值化分割(迭代法)
Nov 20 Python
Python安装Bs4的多种方法
Nov 28 Python
使用python绘制横竖条形图
Apr 21 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
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
2009/03/03 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
PHP处理bmp格式图片的方法分析
2017/07/04 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
2011/03/03 Javascript
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
2015/12/18 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
vue 判断页面是首次进入还是再次刷新的实例
2020/11/05 Javascript
python操作xml文件详细介绍
2014/06/09 Python
Python功能键的读取方法
2015/05/28 Python
Python中文竖排显示的方法
2015/07/28 Python
使用Python+Splinter自动刷新抢12306火车票
2018/01/03 Python
Flask框架URL管理操作示例【基于@app.route】
2018/07/23 Python
利用python实现对web服务器的目录探测的方法
2019/02/26 Python
Python socket模块方法实现详解
2019/11/05 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配
2020/04/08 HTML / CSS
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
英国著名药妆店:Superdrug
2021/02/13 全球购物
网络宣传方案
2014/03/15 职场文书
白血病募捐倡议书
2014/05/14 职场文书
升职演讲稿范文
2014/05/23 职场文书
群众路线剖析材料(四风问题)
2014/10/08 职场文书
陕西导游词
2015/02/04 职场文书
【海涛dota解说】DCG联赛第一周 LGD VS DH
2022/04/01 DOTA
Vue Mint UI mt-swipe的使用方式
2022/06/05 Vue.js