為什麼需要robots協定
目前項目網站經常面臨着被爬蟲的風險。這些爬蟲中有些是必要的,有些則是非要的,甚至是惡意的。漫無目的的爬蟲将會極大消耗伺服器帶寬,在未經網站所有人許可的情況下随意複制、使用網站資料資訊。同時,應當被爬蟲的資料又不能保證搜尋引擎編入索引檔案中以增加曝光量。
而robots協定可以解決這些問題。seo建議各位僅當網站包含不希望被搜尋引擎收錄的内容時,才使用robots協定。如果您希望搜尋引擎收錄網站上所有内容,請勿建立robots.txt檔案(robots協定的具體實作)。
網絡爬蟲爬取過程
網際網路的網頁都是通過超連結互相關聯的,進而形成了網頁的網狀結構。是以爬蟲的工作方法就如蜘蛛在網絡上沿着超連結按照一定的爬取規則爬取網頁。

基本流程大緻為:
1) 喂給爬蟲一堆 URL,稱之為 種子(Seeds);
2) 爬蟲爬取 Seeds,分析 HTML 網頁,抽取其中的 超連結;
3) 爬蟲接着爬取這些 新發現 的超連結指向的 HTML 網頁;
4) 對過程 2),3)循環往複;
robots是什麼
Robots 協定(也稱為爬蟲協定等)的全稱是「網絡爬蟲排除标準」(Robots Exclusion Protocol)。網站通過 Robots 協定告訴搜尋引擎哪些頁面可以抓取,哪些頁面不能抓取。
robots工作原理
Robots 協定通過robots.txt 進行表述。
robots.txt(統一小寫)是一個文本檔案,存放于網站根目錄下,任何一個常見的文本編輯器都可以檢視或編輯它。
當一個搜尋蜘蛛通路一個站點時,它會首先檢查該站點根目錄下是否存在robots.txt,如果存在,搜尋機器人就會按照該檔案中的内容來确定通路的範圍;如果該檔案不存在,所有的搜尋蜘蛛将能夠通路網站上所有沒有被密碼保護的頁面。
一個robots.txt隻能控制相同協定,相同端口的網頁抓取政策。
最簡單的robots.txt
1、檔案名統一小寫,放置到網站根目錄的路徑下
2、檔案内容
最簡單的robots.txt隻有兩條規則:
User-agent:指定對哪些爬蟲生效
Disallow:指定要屏蔽的網址
Allow:與Disallow正好相反,允許爬蟲通路的路徑。可與disallow配合使用,誰管的越細就聽誰的,範圍更明确時起作用。
舉個栗子,以下為不允許任何操作引擎通路任何目錄
User-agent: *
Disallow: /
以下為不允許一淘spider、慧慧助手通路任何目錄,不允許任何網站通路以“/login”或“/xy”開頭的目錄,但允許通路以"/xy-tb"開頭的目錄。
User-agent: *
Disallow: /login
Disallow: /xy
Allow: /xy-tb
User-agent: EtaoSpider
Disallow: /
User-agent: HuihuiSpider
Disallow: /
驗證方式
文法驗證工具
https://www.websiteplanet.com/zh-hans/webtools/robots-txt/
百度測試工具
打開https://ziyuan.baidu.com/robots/index,在右側輸入網站位址,點選檢測,如果在根目錄下已放置robots.txt文檔,則會在下方顯示您的Robots檔案已生效。
在域名下輸入指定路徑進行校驗,檢視規則是否滿足需求
google測試工具
https://support.google.com/webmasters/answer/6062598?hl=zh-Hans
通過Scrapy驗證
scrapy預設支援robots協定
入門教程參考如下:
https://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html
使用爬蟲的法律風險
robots協定并不是一個規範,而隻是約定俗成的,不能保證被強制執行,是以并不能保證網站的隐私。在爬蟲與反爬蟲的對弈中,爬蟲一定會勝利。是以對機密資訊的保護并不能依賴robots協定。
關于Robots協定的法律屬性,我國目前法律下并沒有明确規定,但《網際網路搜尋引擎服務自律公約》第七條規定,“遵循國際通行的行業慣例與商業規則,遵守機器人協定(robots協定)”。第八條則規定“網際網路站所有者設定機器人協定應遵循公平、開放和促進資訊自由流動的原則,限制搜尋引擎抓取應有行業公認合理的正當理由,不利用機器人協定進行不正當競争行為,積極營造鼓勵創新、公平公正的良性競争環境。”
如前所述說,由于爬蟲的批量通路會給網站帶來巨大的壓力和負擔,是以許多網站經營者會采取技術手段,以阻止爬蟲批量擷取自己網站資訊。常見的技術措施包括:(1)通過UA 識别爬蟲、(2)設定IP通路頻率,如果超過一定頻率,彈出驗證碼(3)通過并發識别爬蟲;(4)請求的時間視窗過濾統計;(5)限制單個ip/api token的通路量;(6)識别出合法爬蟲(7)蜜罐資源等。
強行突破某些特定被爬方的技術措施,可能構成刑事犯罪行為。《刑法》第二百八十六條還規定,違反國家規定,對計算機資訊系統功能進行删除、修改、增加、幹擾,造成計算機資訊系統不能正常運作,後果嚴重的,構成犯罪,處五年以下有期徒刑或者拘役;後果特别嚴重的,處五年以上有期徒刑。而違反國家規定,對計算機資訊系統中存儲、處理或者傳輸的資料和應用程式進行删除、修改、增加的操作,後果嚴重的,也構成犯罪,依照前款的規定處罰。
目前站點也采取了一定的技術措施,并在系統中記錄有痕迹。可以通過這些措施識别出非合法爬蟲,并保留法律追責權利。
附錄
(一)常見文法屬性
robots.txt整個檔案分為x節,一節由y個User-agent行和z個Disallow行組成。一節就表示對User-agent行指定的y個爬蟲屏蔽z個網址。這裡x>=0,y>0,z>0。x=0時即表示空檔案,空檔案等同于沒有robots.txt。
其它的還有allow、sitemap、Crawl-delay(貌似現在大多不支援了)等,但這些并不是所有引擎都支援的。
(1)、User-agent
爬蟲抓取時會聲明自己的身份,這就是User-agent,如http協定裡的User-agent,robots.txt利用User-agent來區分各個引擎的爬蟲。
舉例說明:
//指定google網頁搜尋引擎
User-agent:Googlebot
//指定所有爬蟲
User-agent: *
(2)、Disallow
Disallow行列出的是要攔截的網頁,以正斜線 (/) 開頭,可以列出特定的網址或模式。
要屏蔽整個網站,使用正斜線即可,如下所示:
Disallow: /
要屏蔽某一目錄以及其中的所有内容,在目錄名後添加正斜線,如下所示:
Disallow: /無用目錄名/
要屏蔽某個具體的網頁,就指出這個網頁,如下所示:
Disallow: /網頁.html
(3)、Allow ,允許通路
舉個栗子,如下意為屏蔽seo開頭,且不屏蔽seo50,但屏蔽seo50下的seo.html
Disallow:/seo
Allow:/seo50/
Disallow:/seo50/seo.html
(4)、sitemap
通知搜尋引擎網站上有哪些可供抓取的網頁,防止爬蟲通過連結抓取不到該位址。
最簡單的Sitepmap形式就是XML檔案,也可以是html檔案
Sitemap: /sitemap.html 告訴爬蟲這個頁面是網站地圖。
示例如下:
https://www.fanhaobai.com/sitemap.xml
(5)、指定資源爬取頻率
Request-rate: 用來限制URL的讀取頻率;
Crawl-delay: n 每次抓取間隔n秒;但是次數的含義,各個爬蟲引擎略有不同;
Request-rate: x/n 每n秒抓取x個頁面,避免重複抓取。
(二)基于路徑值的網址比對
*是一個通配符
.htm$ 僅允許通路以".htm"為字尾的URL
/pwd/ 即pwd目錄下面的目錄。
/pwd pwd的整個目錄
/? 所有包含問号 (?) 的網址
(三)常見網站robots.txt
https://www.baidu.com/robots.txt
https://tieba.baidu.com/robots.txt
https://www.jd.com/robots.txt
https://www.taobao.com/robots.txt
https://www.zhihu.com/robots.txt
https://www.sogou.com/robots.txt
https://www.aliyun.com/robots.txt
https://cn.bing.com/robots.txt
https://www.google.com/robots.txt