Tomcat和搜尋引擎網路爬蟲的攻防
不知道廣大程式設計師朋友們注意到一個現象麼?使用百度是無法搜尋到淘寶網的網頁。為什麼會造成這種現象?這就要從網路爬蟲說起了。
我們們程式設計師假如自己搭設個人網站,在上面分享少量自己的技術文章,面臨的一個重要問題就是讓搜尋引擎能夠搜尋到自己的個人網站,這樣才能讓更多的讀者訪問到。
而搜尋引擎如百度和微軟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的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2213848/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Nutch:從搜尋引擎到網路爬蟲---分享公開課爬蟲
- 如何使用robots禁止各大搜尋引擎爬蟲爬取網站爬蟲網站
- CDN源站遮蔽搜尋引擎爬蟲爬蟲
- 搜尋引擎爬蟲蜘蛛的User-Agent收集爬蟲
- Scrapy分散式爬蟲打造搜尋引擎-(八)elasticsearch結合django搭建搜尋引擎分散式爬蟲ElasticsearchDjango
- Web網站如何檢視搜尋引擎蜘蛛爬蟲的行為Web網站爬蟲
- laravel 簡單限制搜尋引擎爬蟲頻率Laravel爬蟲
- 以圖搜尋——網際網路影象搜尋引擎的“雞肋”?
- Flutter 網路搜尋引擎SEO優化友好Flutter優化
- 搜尋引擎-03-搜尋引擎原理
- 搜狗搜尋微信Python爬蟲案例Python爬蟲
- 2018.2最新-搜尋引擎搭建-scrapyd部署我們的爬蟲專案爬蟲
- Python爬蟲全網搜尋並下載音樂Python爬蟲
- 用開源搜尋引擎定製你的網際網路
- Python爬蟲系列(六):搜尋文件樹Python爬蟲
- 網路爬蟲爬蟲
- 各大網際網路巨頭的搜尋引擎交鋒PGB
- 關於mongodb和搜尋引擎??MongoDB
- 網路偵察技術(一)搜尋引擎資訊收集
- 網路爬蟲——爬蟲實戰(一)爬蟲
- 網路爬蟲的原理爬蟲
- 傻傻的網路爬蟲爬蟲
- 海量資料搜尋---搜尋引擎
- Python爬蟲 搜尋並下載圖片Python爬蟲
- 泛企業搜尋PK網際網路搜尋
- 網路爬蟲精要爬蟲
- 網路爬蟲示例爬蟲
- 網路爬蟲的反扒策略爬蟲
- solr 7.0 搭建 maven 整合,基於tomcat 搜尋引擎 部署SolrMavenTomcat
- Shodan:網際網路上最可怕的搜尋引擎
- 限制IP到全流程防控,講解網路爬蟲與技術反爬的動態攻防爬蟲
- 爬蟲學習之基於Scrapy的網路爬蟲爬蟲
- 什麼是Python網路爬蟲?常見的網路爬蟲有哪些?Python爬蟲
- 網站搜尋引擎優化問題網站優化
- Nebula 基於 ElasticSearch 的全文搜尋引擎的文字搜尋Elasticsearch
- 幾大搜尋引擎的網站登入入口網站
- 文字獲取和搜尋引擎簡介
- ElasticSearch全文搜尋引擎Elasticsearch