不知道广大程序员朋友们注意到一个现象么?使用百度是无法搜索到淘宝网的网页。为什么会造成这种现象?这就要从网络爬虫说起了。

咱们程序员假如自己搭设个人网站,在上面分享少量自己的技术文章,面临的一个重要问题就是让搜索引擎能够搜索到自己的个人网站,这样才能让更多的读者访问到。

而搜索引擎如百度和微软Bing搜索,Google搜索等通过什么方式才能收录我们的个人网站呢?

答案是搜索引擎的网络爬虫。 网络爬虫是一个很形象的名词,是属于搜索引擎的工具,只有被这些网络爬虫“爬过”的内容才有机会出现在对应搜索引擎的搜索结果中。

个人站长对网络爬虫是又爱又恨。一方面,网络爬虫可以让我们的个人网站出现在搜索结果里,对我们的个人网站进行扩散。另一方面,假如网络爬虫太多太频繁地访问个人网站,会肯定程度上影响正常使用户的请求解决。

于是就有了文章开头我提到的百度搜不到淘宝产品信息的文章。

在浏览器里输入https://www.taobao.com/robots.txt,

能看到淘宝网的一个文件robots.txt:

随意选一段解释:这个robots.txt的意思是,淘宝网做出了规定,假如网络请求来自百度爬虫(Baiduspider), 那么只允许(allow)百度爬虫读取article, oshtml和/ershou, 不允许读取的是product。

User-agent: Baiduspider

Allow: /article

Allow: /oshtml

Allow: /ershou

Disallow: /product/

Disallow: /

那么淘宝网怎样知道一个请求是来自百度爬虫,还是来自真正的使用户访问呢?答案就是HTTP请求的User-agent字段。

下图是我使用Chrome访问淘宝网的HTTP请求的User-agent:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36

再回到Tomcat。假如有大量来自网络爬虫的读取请求,Web服务器需要为每一个请求创立一个session。当Session数量变得巨大时,消耗的服务器内存和资源也是巨大的。

因而,Tomcat对于来自网络爬虫的请求,用同一个session来解决。

我们打开Tomcat的源代码来学习。

Tomcat的源代码可以到其官网去下载:

https://tomcat.apache.org/download-70.cgi

点这个链接:

我下载的是7.0.90版本,只有7MB大。

这里需要注意,即便Spider显式的传了一个 sessionId过来,也会弃使用,而是根据client Ip 来进行判断,即对于 相同的 Spider 只提供一个Session。

在下载好的源代码文件夹里,找到这个子文件夹:\apache-tomcat-7.0.90-src\java\org\apache\catalina\valves

打开CrawlerSessionManagerValve.java:

可以看到从第192行代码开始都是Tomcat使用来检测进来的网络请求能否是网络爬虫:

通过这个类里定义的正则表达式检测HTTP请求的user-agent字段来判断究竟该请求能否来自网络爬虫:

".[bB]ot.|.Yahoo! Slurp.|.Feedfetcher-Google."

一旦正则表达式在第205行匹配成功,将第206行的标志位设成true。

假如检测到是网络爬虫,则使用clientIdSessionId.get这个API获取Tomcat专门为网络爬虫预留的sessionId, 而后在第226行把该sessionId分配到进来的网络爬虫请求,这样就避免了白费太多的资源申请session来服务海量的网络爬虫请求,节省了Web服务器的资源。

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

Tomcat和搜索引擎网络爬虫的攻防的更多相关文章

  1. [Search Engine] 搜索引擎技术之网络爬虫

    随着互联网的大力发展,互联网称为信息的主要载体,而如何在互联网中搜集信息是互联网领域面临的一大挑战.网络爬虫技术是什么?其实网络爬虫技术就是指的网络数据的抓取,因为在网络中抓取数据是具有关联性的抓取, ...

  2. 基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎

    基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎 网络爬虫架构在Nutch+Hadoop之上,是一个典型的分布式离线批量处理架构,有非常优异的吞吐量和抓取性能并 ...

  3. 什么是网络爬虫(Spider) 程序

    Spider又叫WebCrawler或者Robot,是一个沿着链接漫游Web 文档集合的程序.它一般驻留在服务器上,通过给定的一些URL,利用HTTP等标准协议读取相应文档,然后以文档中包括的所有未访 ...

  4. 2.02_Python网络爬虫分类及其原理

    一:通用爬虫和聚焦爬虫 根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用网络爬虫是捜索引擎抓取系统(Baidu.Google.Yahoo等)的重要组成部分.主要目的是将互联 ...

  5. 【搜索引擎Jediael开发笔记1】搜索引擎初步介绍及网络爬虫

    详细可参考 (1)书箱:<这就是搜索引擎><自己动手写网络爬虫><解密搜索引擎打桩实践> (2)[搜索引擎基础知识1]搜索引擎的技术架构 (3)[搜索引擎基础知识2 ...

  6. 网络爬虫与搜索引擎优化(SEO)

    爬虫及爬行方式 爬虫有很多名字,比如web机器人.spider等,它是一种可以在无需人类干预的情况下自动进行一系列web事务处理的软件程序.web爬虫是一种机器人,它们会递归地对各种信息性的web站点 ...

  7. 一个大数据方案:基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎

    网络爬虫架构在Nutch+Hadoop之上,是一个典型的分布式离线批量处理架构,有非常优异的吞吐量和抓取性能并提供了大量的配置定制选项.由于网络爬虫只负责网络资源的抓取,所以,需要一个分布式搜索引擎, ...

  8. nutch从搜索引擎到网络爬虫

    人物介绍 姓名:DougCutting 个人名望:开发出开源全文检索引擎工具包Lucene. 个人简介/主要荣誉:除了 Lucene,还开发了著名的网络爬虫工具 Nutch,分布式系统基础架构Hado ...

  9. 【架构】基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎

    网络爬虫架构在Nutch+Hadoop之上,是一个典型的分布式离线批量处理架构,有非常优异的吞吐量和抓取性能并提供了大量的配置定制选项.由于网络爬虫只负责网络资源的抓取,所以,需要一个分布式搜索引擎, ...

随机推荐

  1. 理解Objective-C Runtime(三)消息转发机制

    消息转发机制概述 上一篇博客消息传递机制中讲解了Objective-C中对象的「消息传递机制」.本文需要讲解另外一个重要问题:当对象受到无法处理的消息之后会发生什么情况? 显然,若想令类能理解某条消息 ...

  2. 依赖倒置原则DIP&控制反转IOC&依赖注入DI

    依赖倒置原则DIP是软件设计里一个重要的设计思想,它规定上层不依赖下层而是共同依赖抽象接口,通常可以是上层提供接口,然后下层实现接口,上下层之间通过接口完全透明交互.这样的好处,上层不会因依赖的下层修 ...

  3. jQuery EasyUI Portal 保存拖动位置,仿谷歌DashBoard效果的

    仿照谷歌http://www.google.com/ig?hl=zh-CN中的效果,本文档中包含了拖动后保存位置至Cookie中以及拖动后不保存位置的html文件效果,文档结构

  4. mac下载模块时报错OSError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/chardet'

    原文地址:https://www.cnblogs.com/liangyan-1989/p/8143129.html 安装完pip后,使用pip install selenium报以下错 OSError ...

  5. Mac系统下源码编译安装MySQL 5.7.17

    1.下载并解压到:/Users/xiechunping/Softwares/mysql-5.7.17下载地址:http://ftp.ntu.edu.tw/pub/MySQL/Downloads/MyS ...

  6. J20170422-hm

    ワイルドスクリプト wild script 通配符 シェルスクリプト     shell脚本

  7. poj3050【dfs】

    题意: 5*5的矩阵里,某个点能够上下左右走,走5步,然后路径会形成一个串,问你,这个5*5里面能够形成多少个不同个串. 思路: 直接暴搜,然后对于一个串塞到set里去,然后输出set里的个数就好了 ...

  8. Cocos2d-html5游戏开发,常用工具集合

    代码编辑器IDEWebStorm (Windows, Mac) Cocos2d-html5官方团队在用,非常优秀的工具,请大家支持正版动画编辑器 Animation EditorSpriteHelpe ...

  9. bzoj 3172: [Tjoi2013]单词【AC自动机】

    一眼AC自动机,就是先把串建一个自动机,标记每个串在自动机上的位置,然后加上间隔符连成一个串在自动机上跑,每跑到一个点就说明这个串以及它到root的所有点表示的串都要被更新一次 先在点上打上标记,最后 ...

  10. bzoj 3771: Triple【生成函数+FFT+容斥原理】

    瞎搞居然1A,真是吃鲸 n的范围只有聪明人能看见--建议读题3遍 首先看计数就想到生成函数,列出多项式A(x),然后分别考虑123 对于选一个的直接计数即可: 对于选两个的,\( A(x)^2 \), ...