新用户注册入口 老用户登录入口

你知道吗,访问你的服务器的用户很可能是爬虫,如何识别它们呢

文章作者:admin-tim 更新时间:2024-01-26 16:45:09 阅读数量:424
文章标签:搜索引擎java代码爬虫User-Agent流量Googlebot
本文摘要:本文介绍了如何通过User-Agent识别爬虫身份,有的是搜索引擎的爬虫、有的是未预期的爬虫。还给出了几段java代码,来帮助识别爬虫,并且可以把爬虫身份打印到日志中。最后,说明了一种特殊情况,即使是搜索引擎的正经爬虫,有时候也不会带着User-Agent标识自己是爬虫身份的标识头来访。
Java

1. 背景

一个已经发布到互联网的站点,每天都会有很多访问流量,这些流量里面有的是自然用户、有的是爬虫

对于爬虫,有的是来自各大搜索引擎的爬虫,比如百度爬虫、谷歌爬虫、bing爬虫(bing即微软的必应搜索引擎)等等,这些搜索引擎的爬虫可以为我们的网站带来可能得收录。还有的可能是我们不期待的爬虫。

这里,这里要还要简单说明的是,搜索引擎的爬虫来爬取不等于收录,收录的还需要很多必备条件,比如网站质量、是否原创、是否重复、用户体验、外链建设等等,不在这里展开介绍了。

2. 举个例子

比如Google的爬虫,每次来访的时候,都会带着它独有的user-agent,如下:

Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.224 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

从这个user-agent可以看到出,来访者会告知自己身份是Googlebot,即来自谷歌搜索引擎的爬虫。

关于爬虫身份的识别,zac老师整理过一篇非常权威的列表,大家可参考:

https://www.seozac.com/course/spider-user-agent-list/

3.java代码示例

3.1 身份标识枚举类

识别了爬虫身份后,这里封装了一个身份枚举类,作为简单说明和java方法返回值。每个枚举项目后面的注释里都标注着对应爬虫的关键词,可以用来做字符串contains操作。


public static enum UserAgentRole {

BAIDU_SPIDER, // Baiduspider/2.0或Baiduspider-render/2.0

GOOGLE_SPIDER, //  Googlebot/2.1或Googlebot-Image/1.0

BING_SPIDER, //bingbot/2.0

SOUGOU_SPIDER, // Sogou web spider/4.0或Sogou wap spider/4.0

_360_SPIDER, // 360Spider

SHENMA_SPIDER, // YisouSpider/5.0

YANDEX_SPIDER, // YandexBot/3.0

HUAWEI_SPIDER, //  PetalBot

AMAZON_SPIDER, // Amazonbot/0.1

OTHER_SPIDER, // 未知spider

NATURAL_USER, // 非spider的自然用户

UNKNOWN // 没有user-agent头

}

3.2 HttpServletRequest中取得User-Agent

HttpServletRequest request = ...

String userAgent = request.getHeader("User-Agent");

3.3 通过userAgent返回UserAgentRole

private static UserAgentRole checkUserAgentRole(String userAgent) {

if (StringUtils.isEmpty(userAgent)) {

return UserAgentRole.UNKNOWN;

}

userAgent = userAgent.toLowerCase();

if (userAgent.contains("bot") || userAgent.contains("spider")) {

if (userAgent.contains("baidu")) {

return UserAgentRole.BAIDU_SPIDER;

} else if (userAgent.contains("google")) {

return UserAgentRole.GOOGLE_SPIDER;

} else if (userAgent.contains("bing")) {

return UserAgentRole.BING_SPIDER;

} else if (userAgent.contains("sougou")) {

return UserAgentRole.SOUGOU_SPIDER;

} else if (userAgent.contains("360")) {

return UserAgentRole._360_SPIDER;

} else if (userAgent.contains("yisou")) {

return UserAgentRole.SHENMA_SPIDER;

} else if (userAgent.contains("yandex")) {

return UserAgentRole.YANDEX_SPIDER;

} else if (userAgent.contains("petal")) {

return UserAgentRole.HUAWEI_SPIDER;

} else if (userAgent.contains("amazon")) {

return UserAgentRole.AMAZON_SPIDER;

} else {

return UserAgentRole.OTHER_SPIDER;

}

}

return UserAgentRole.NATURAL_USER;

}

4. 不带User-Agent的搜索引擎的爬虫

多说一句,有时候即使是正经搜索引擎的爬虫,也不会带着User-Agent来正经标识自己的爬虫身份。

这是因为,为了在seo里为了避免下面这种情况:

  • 某站长作弊,对普通用户返回一套页面,对搜索引擎,返回一套页面。
  • 对搜索引擎返回的页面是做过特殊优化的,其实是有作弊嫌疑的。
  • 那搜索引擎为了判断是否有作弊嫌疑,就会用正经带有爬虫标识的User-Agent请求一次,再在不定期的时候用普通身份请求一次。


相关阅读
文章标题:java中模块和类模块的区别

更新时间:2023-01-11
java中模块和类模块的区别
文章标题:java中char和ch区别

更新时间:2023-01-16
java中char和ch区别
文章标题:你知道吗,访问你的服务器的用户很可能是爬虫,如何识别它们呢

更新时间:2024-01-26
你知道吗,访问你的服务器的用户很可能是爬虫,如何识别它们呢
文章标题:java中异步和同步的问题

更新时间:2023-05-04
java中异步和同步的问题
文章标题:计算机领域分词词汇表,点这里免费下载txt,内有java的IKAnalyzer示例

更新时间:2024-01-26
计算机领域分词词汇表,点这里免费下载txt,内有java的IKAnalyzer示例
文章标题:java中T和object的关系

更新时间:2023-11-01
java中T和object的关系
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
clear 或 Ctrl+L - 清除终端屏幕内容。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
Bootstrap3扁平风格垂直手风琴特效 10-24 3种jQuery和css3精美文字排版特效插件 05-23 js打字机动画特效插件autotyperjs 03-17 jQuery超实用文字和图片列表滚动插件 02-21 提升PostgreSQL网络连接性能:连接池配置、TCP/IP调优与批量处理、数据压缩实践 02-02 亚马逊跨境电商一站式服务企业网站模板 01-26 红色大气古典陶瓷艺术公司网站模板 10-24 创意自适应造型设计理发店官网静态模板 10-18 实用jQuery和CSS3圆形弹性伸缩导航菜单 09-21 本次刷新还10个文章未展示,点击 更多查看。
绿色水果蔬菜批发直营通用HTML5模板下载 09-12 Gradle打包时依赖包的添加、同步与插件配置:从build.gradle文件到jar/war构建过程中的依赖管理与解析 08-27 Hadoop中JobTracker与TaskTracker通信失败问题:网络连接、硬件故障与软件配置解析 07-16 纯js轻量级图片放大显示插件 07-09 响应式精密机械仪器设备类企业前端CMS模板下载 07-04 ClickHouse列式存储下的高可用架构实践:冗余部署、负载均衡与数据备份恢复策略 06-13 在Maven中通过dependencyManagement替换Spring Boot组件版本:子模块与集中管理实践 05-29 响应式建筑装饰设计类企业前端CMS模板下载 04-14 ZooKeeper在分布式任务调度中的核心应用:临时节点、监听器与数据一致性保障实践 04-06 python求单位向量 03-29 响应式创意网络科技公司网站模板 02-17
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"