關閉

                  什么樣的爬蟲才是好爬蟲:Robots協議探究

                  發表于:2021-10-18 09:39

                  字體: | 上一篇 | 下一篇 | 我要投稿

                   作者:豈安    來源:思否

                  #
                  爬蟲
                    網站的管理者們通常會有這樣一種心態:一方面期待百度、Google這樣的搜索引擎來抓取網站的內容,另一方面又很厭惡其他來路不明的網絡爬蟲抓取自己的信息。正是因為這樣,才有“好爬蟲”、“壞爬蟲”這樣的說法。
                    提到“好爬蟲”,就不得不提網絡爬蟲與web之間的訪問授權協議——Robots協議了。

                    Robots協議的定義
                    Robots協議(也稱為爬蟲協議、機器人協議等)的全稱是“網絡爬蟲排除標準”(Robots Exclusion
                    Protocol),網站通過Robots協議告訴搜索引擎哪些頁面可以抓取,哪些頁面不能抓取。
                    根據協議,網站管理員可以在網站域名的根目錄下放一個robots.txt 文本文件,里面可以指定不同的網絡爬蟲能訪問的頁面和禁止訪問的頁面,指定的頁面由正則表達式表示。網絡爬蟲在采集這個網站之前,首先獲取到這個文件,然后解析到其中的規則,然后根據規則來采集網站的數據。
                    注意,這個協議的存在更多的是需要網絡爬蟲去遵守,而起不到防止爬蟲的功能。

                    為什么需要Robots協議
                    互聯網上的網頁是通過超級鏈接互相關聯起來的,從而形成了網頁的網狀結構。爬蟲的工作方式就像蜘蛛在網上沿著鏈接爬來爬去,最基本的流程可以簡化如下:
                    1.喂給爬蟲一堆url,我們稱之為種子(seeds);
                    2.爬蟲抓取seeds,解析html網頁,抽取其中的超級鏈接;
                    3.爬蟲接著抓取這些新發現的鏈接指向的網頁。
                    步驟2和步驟3循環往復。
                    了解了上面的流程就能發現:對爬蟲來說網站非常被動,只有老老實實被抓取的份。
                    所以,對于網站的管理者來說,就存在這樣的需求:
                    某些路徑下是個人隱私或者網站管理使用,不想被搜索引擎抓取,比如說日本愛情動作片;
                    不喜歡某個搜索引擎,不愿意被他抓取,最有名的就是之前淘寶不希望被百度抓;
                    小網站使用的是公用的虛擬主機,流量有限或者需要付費,希望搜索引擎抓的溫柔點;
                    某些網頁是動態生成的,沒有直接的鏈接指向,但是希望內容被搜索引擎抓取和索引。
                    網站內容的所有者是網站管理員,搜索引擎應該尊重所有者的意愿,為了滿足以上等等,就需要提供一種網站和爬蟲進行溝通的途徑,給網站管理員表達自己意愿的機會。有需求就有供應,robots協議就此誕生。

                    Robots協議的寫法
                    既然網絡爬蟲在爬取一個網站之前,要先獲取到這個文件,然后解析到其中的規則,那么,Robots就必須要有一套通用的語法規則。
                    最簡單的robots.txt只有兩條規則:
                    ·User-agent:指定對哪些爬蟲生效
                    ·Disallow:指定要屏蔽的網址
                    先說User-agent,爬蟲抓取時會聲明自己的身份,這就是User-agent,沒錯,就是http協議里的User-agent。robots.txt利用User-agent來區分各個引擎的爬蟲,比如說google網頁搜索爬蟲的User-agent為Googlebot。
                    可能有讀者要問了,我怎么知道爬蟲的User-agent是什么?你還可以查相關搜索引擎的資料得到官方的數據,比如說百度的爬蟲列表是這樣的:

                    Disallow 行列出的是要攔截的網頁,以正斜線 (/) 開頭,可以列出特定的網址或模式。要屏蔽整個網站,使用正斜線即可;要屏蔽某一目錄以及其中的所有內容,在目錄名后添加正斜線;要屏蔽某個具體的網頁,就指出這個網頁。
                    下面我們來看一些Robots的具體寫法:
                    允許所有的robot訪問:
                  User-agent: *
                  Disallow:

                    或者也可以建一個空文件 "/robots.txt" file。
                    禁止爬蟲訪問所有目錄:
                  User-agent: *
                  Disallow: /

                    禁止爬蟲訪問某些目錄:
                  User-agent: *
                  Disallow: /a/
                  Disallow: /b/
                  Disallow: /c/

                    禁止某些爬蟲訪問:
                  User-agent: BadBot
                  Disallow: /

                    只允許某個爬蟲訪問:
                  User-agent: MangCrawler
                  Disallow:
                  User-agent: *
                  Disallow: /

                    我們再來結合兩個真實的范例來學習一下。先看這個例子:
                  User-agent: Baiduspider
                  Disallow: /
                  User-agent: baiduspider
                  Disallow: /

                    這個是淘寶網的Robots協議內容,相信你已經看出來了,淘寶網禁止百度的爬蟲訪問。
                    再來看一個例子:
                  User-agent: *
                  Disallow: /?*
                  Disallow: /pop/*.html
                  User-agent: EtaoSpider
                  Disallow: /

                    這個稍微復雜點,京東有2個目錄不希望所有的爬蟲來抓。同時,京東完全屏蔽了一淘網的蜘蛛(EtaoSpider是一淘網的蜘蛛)。

                    Robots協議進階知識
                    sitemap
                    前面說過爬蟲會通過網頁內部的鏈接發現新的網頁。但是如果沒有連接指向的網頁怎么辦?或者用戶輸入條件生成的動態網頁怎么辦?能否讓網站管理員通知搜索引擎他們網站上有哪些可供抓取的網頁?這就是sitemap,最簡單的 Sitepmap 形式就是 XML 文件,在其中列出網站中的網址以及關于每個網址的其他數據(上次更新的時間、更改的頻率以及相對于網站上其他網址的重要程度等等),利用這些信息搜索引擎可以更加智能地抓取網站內容。
                    新的問題來了,爬蟲怎么知道這個網站有沒有提供sitemap文件,或者說網站管理員生成了sitemap,(可能是多個文件),爬蟲怎么知道放在哪里呢?
                    由于robots.txt的位置是固定的,于是大家就想到了把sitemap的位置信息放在robots.txt里。這就成為robots.txt里的新成員了。
                    插一句,考慮到一個網站的網頁眾多,sitemap人工維護不太靠譜,google提供了工具可以自動生成sitemap。

                    meta tag
                    其實嚴格來說這部分內容不屬于robots.txt。
                    robots.txt的初衷是為了讓網站管理員管理可以出現在搜索引擎里的網站內容。但是,即使使用 robots.txt 文件讓爬蟲無法抓取這些內容,搜索引擎也可以通過其他方式找到這些網頁并將它添加到索引中。例如,其他網站仍可能鏈接到該網站。因此,網頁網址及其他公開的信息(如指向相關網站的鏈接中的定位文字或開放式目錄管理系統中的標題)有可能會出現在引擎的搜索結果中。如果想徹底對搜索引擎隱身那咋整呢?答案是:元標記,即meta tag。
                    比如要完全阻止一個網頁的內容列在搜索引擎索引中(即使有其他網站鏈接到此網頁),可使用 noindex 元標記。只要搜索引擎查看該網頁,便會看到 noindex 元標記并阻止該網頁顯示在索引中,這里注意noindex元標記提供的是一種逐頁控制對網站的訪問的方式。
                    要防止所有搜索引擎將網站中的網頁編入索引,在網頁的部分添加:
                  <meta name="robots" content="noindex">

                    這里的name取值可以設置為某個搜索引擎的User-agent從而指定屏蔽某一個搜索引擎。
                    除了noindex外,還有其他元標記,比如說nofollow,禁止爬蟲從此頁面中跟蹤鏈接。詳細信息可以參考Google支持的元標記,這里提一句:noindex和nofollow在HTML 4.01規范里有描述,但是其他tag的在不同引擎支持到什么程度各不相同,還請讀者自行查閱各個引擎的說明文檔。

                    Crawl-delay
                    除了控制哪些可以抓哪些不能抓之外,robots.txt還可以用來控制爬蟲抓取的速率。如何做到的呢?通過設置爬蟲在兩次抓取之間等待的秒數。
                  Crawl-delay:5

                    表示本次抓取后下一次抓取前需要等待5秒。
                    注意:google已經不支持這種方式了,在webmaster tools里提供了一個功能可以更直觀的控制抓取速率。
                    這里插一句題外話,幾年前曾經有一段時間robots.txt還支持復雜的參數:Visit-time,只有在visit-time指定的時間段里,爬蟲才可以訪問;Request-rate: 用來限制URL的讀取頻率,用于控制不同的時間段采用不同的抓取速率。后來估計支持的人太少,就漸漸的廢掉了,目前google和baidu都已經不支持這個規則了,其他小的引擎公司貌似從來都沒有支持過。

                    防君子不防小人
                    Robots協議不是什么技術壁壘,而只是一種互相尊重的協議,好比私家花園的門口掛著“閑人免進”,尊重者繞道而行,不尊重者依然可以推門而入。目前,Robots協議在實際使用中,還存在一些問題。

                    緩存
                    robots.txt本身也是需要抓取的,出于效率考慮,一般爬蟲不會每次抓取網站網頁前都抓一下robots.txt,加上robots.txt更新不頻繁,內容需要解析。通常爬蟲的做法是先抓取一次,解析后緩存下來,而且是相當長的時間。假設網站管理員更新了robots.txt,修改了某些規則,但是對爬蟲來說并不會立刻生效,只有當爬蟲下次抓取robots.txt之后才能看到最新的內容。尷尬的是,爬蟲下次抓取robots.txt的時間并不是由網站管理員控制的。當然,有些搜索引擎提供了web 工具可以讓網站管理員通知搜索引擎那個url發生了變化,建議重新抓取。注意,此處是建議,即使你通知了搜索引擎,搜索引擎何時抓取仍然是不確定的,只是比完全不通知要好點。至于好多少,那就看搜索引擎的良心和技術能力了。

                    ignore
                    不知是無意還是有意,反正有些爬蟲不太遵守或者完全忽略robots.txt,不排除開發人員能力的問題,比如說根本不知道robots.txt。另外,本身robots.txt不是一種強制措施,如果網站有數據需要保密,必需采取技術措施,比如說:用戶驗證,加密,ip攔截,訪問頻率控制等。

                    惡意爬蟲
                    在互聯網世界中,每天都有不計其數的爬蟲在日夜不息地爬取數據,其中惡意爬蟲的數量甚至高于非惡意爬蟲。遵守Robots協議的爬蟲才是好爬蟲,但是并不是每個爬蟲都會主動遵守Robots協議。
                    惡意爬蟲可以帶來很多潛在威脅,比如電商網站的商品信息被爬取可能會被競爭對手利用,過多的爬蟲還會占用帶寬資源、甚至導致網站宕機。

                    本文內容不用于商業目的,如涉及知識產權問題,請權利人聯系51Testing小編(021-64471599-8017),我們將立即處理
                  《2023軟件測試行業現狀調查報告》獨家發布~

                  關注51Testing

                  聯系我們

                  快捷面板 站點地圖 聯系我們 廣告服務 關于我們 站長統計 發展歷程

                  法律顧問:上海蘭迪律師事務所 項棋律師
                  版權所有 上海博為峰軟件技術股份有限公司 Copyright©51testing.com 2003-2024
                  投訴及意見反饋:webmaster@51testing.com; 業務聯系:service@51testing.com 021-64471599-8017

                  滬ICP備05003035號

                  滬公網安備 31010102002173號

                  亚洲欧洲自拍图片专区123_久久久精品人妻无码专区不卡_青青精品视频国产色天使_A免看的日黄亚洲