robots.txt 是什麼?

robots.txt - 維基百科html

robots.txt(統一小寫)是一種存放於網站根目錄下的ASCII編碼的文本文件,它一般告訴網絡搜索引擎的漫遊器(又稱網絡蜘蛛),此網站中的哪些內容是不該被搜索引擎的漫遊器獲取的,哪些是能夠被漫遊器獲取的。由於一些系統中的URL是大小寫敏感的,因此robots.txt的文件名應統一爲小寫。robots.txt應放置於網站的根目錄下。若是想單獨定義搜索引擎的漫遊器訪問子目錄時的行爲,那麼能夠將自定的設置合併到根目錄下的robots.txt,或者使用robots元數據(Metadata,又稱元數據)。前端

robots.txt 協議並非一個規範,只是約定協議,並不能保護網站的隱私。python

robots.txt 結構

參考資料:
robots.txt 文件簡介
The Web Robots Pagesnginx

robots.txt 須要在網站根路徑下能夠訪問,而且只能是小寫,一般是存放一個文本文件命名爲 robots.txt,例如:https://www.jd.com/robots.txtgit

robots.txt 結構也很簡單,經過 User-agent 針對不一樣的爬蟲設置,使用 Disallow 來指定不容許訪問的路徑。github

User-agent: spider_name
Disallow: /disallow_uri_path
複製代碼

Robots 擴展標準

參考資料:
Robots exclusion standardweb

標準的 robots.txtUser-agent 雖然可使用 * 表示全部爬蟲,可是不支持通配符或正則(* 只是一個特定值),Disallow 一樣如此,擴展標準對這些不足進行了完善。瀏覽器

注意:擴展標準是否有效取決於爬蟲是否支持擴展配置項目,以及爬蟲自己的限制。安全

Crawl-delay

Crawl-delay 用於限制爬蟲對網站主機的訪問頻率,設置值定義的是爬蟲的請求間隔,單位爲秒。bash

User-agent: *
Crawl-delay: 10
複製代碼

Allow

Allow 能夠定義容許爬蟲訪問的路徑、資源,配合 Disallow 能夠實現更精準的控制。

Allow: /disallow_uri_path/allow.html
Disallow: /disallow_uri_path/
複製代碼

Sitemap

用於設置網站的 sitemap 訪問 url。

Sitemap: https://www.example.com/sitemap.xml
複製代碼

Host

用於配置可供爬蟲訪問的鏡像站。

通配符 * 支持

標準 robotsDisallow 中不支持使用通配符,擴展標準則容許。

Robots Meta tag

參考資料:
漫遊器元標記、data-nosnippet 和 X-Robots-Tag 規範
Robots Metatags

經過 robots.txt 能夠容許或拒絕爬蟲獲取頁面信息,可是仍然會將頁面索引,一樣會出如今搜索引擎中(可是頁面內容不會)。能夠經過 <meta> 標籤,或者 X-Robots-Tag 響應頭的方式,來避免頁面被爬蟲索引。

<meta> 標籤

<meta name="robots" content="noindex">
複製代碼

meta 標籤能夠針對頁面進行設置,是否容許索引等。

data-nosnippet 屬性

針對頁面元素的設置則須要使用 data-nosnippet 實現,支持在 <span> <div> <section> 塊中定義。可是,獲取 data-nosnippet 配置的前提是該頁面容許爬蟲訪問。

<p>This text can be shown in a snippet
 <span data-nosnippet>and this part would not be shown</span>.</p>

<div data-nosnippet>not in snippet</div>
<div data-nosnippet="true">also not in snippet</div>

<div data-nosnippet>some text</html>
<!-- unclosed "div" will include all content afterwards -->

<mytag data-nosnippet>some text</mytag>
<!-- NOT VALID: not a span, div, or section -->
複製代碼

X-Robots-Tag 響應頭

經過在頁面響應頭中添加 X-Robots-Tag 能夠達到 meta 標籤同樣效果。

X-Robots-Tag: noindex
複製代碼

經過 Web Server 添加響應頭的功能能夠輕鬆配置:

# Nginx
location ~* \.pdf$ {
  add_header X-Robots-Tag "noindex, nofollow";
}

location ~* \.(png|jpe?g|gif)$ {
  add_header X-Robots-Tag "noindex";
}
複製代碼

解析 robots.txt

使用 Python 標準庫 urllib.robotparser — Parser for robots.txt 能夠解析標準協議格式的 robots.txt,若是有擴展協議的需求則能夠考慮使用 Robots Exclusion Protocol Parser for Python

from urllib.robotparser import RobotFileParser

rfp = RobotFileParser(url='https://www.jd.com/robots.txt')
rfp.read()
if rfp.rfp.can_fetch('HuihuiSpider',"/"):
    print('ok')
else:
    print('no')
複製代碼

robots.txt 的侷限性

參考資料:

How to Detect and Verify Search Engine Crawlers
驗證 Googlebot

顯然依靠一個 .txt 文本是沒法真正阻止爬蟲的,遵循 robots.txt 協議徹底靠爬蟲的「自覺」,所以還須要一些 「.exe」 的方式來阻止爬蟲。

技術限制

在 Web Server 配置爲根據阻止指定的 User-agent 能夠阻止爬蟲的訪問,首先須要獲取搜索引擎爬蟲的 User-agent 值。

Google 爬蟲能夠在 Google 抓取工具(用戶代理)概覽 查看;百度爬蟲能夠在 Baiduspider常見問題解答 查看。

以 Nginx 爲例,阻擋全部百度爬蟲的訪問:

if ($http_user_agent ~* (Baiduspider) ) {
    return 403;
}
複製代碼

因爲 User-Agent 是能夠被假冒的,所以須要對訪問 IP 進行驗證。

能夠經過分析 Web Server 的日誌來整理使用了爬蟲 User-Agent 的來源 IP,在經過 host 命令對 IP 進行驗證,或者經過搜索引擎提供的驗證工具進行驗證,好比 必應 Bing - 驗證 Bingbot 工具

在 Nginx 上則可使用如下兩種方式:

Nginx HTTP rDNS module 是基於 Nginx module 的方式,經過驗證聲明爲爬蟲的 IP 反查 Host 判斷,Nginx Ultimate Bad Bot 則是基於自動腳本,添加更新 Nginx 配置的方式,另外還支持基於防火牆層級的阻斷。

可是,爬蟲能夠經過假裝爲正常瀏覽器 User-Agent 的方式突破這些限制,對於這種方式的爬蟲,只能選擇基於行爲去分析、限制,或者依賴前端反爬方案。

法律意義

注:如下內容爲我的解讀,不表明專業分析或法律諮詢。

從國內相關爬蟲案例看,是否遵循 robots.txt 並不是關鍵。

爬取、保存公民我的隱私數據存在極高風險,即使 robots.txt 並未 Disallow,開發爬蟲獲取此類信息或提供第三方使用,一旦牽扯到犯罪行爲,開發者必然會被連帶。

當爬取內容涉及版權、商業信息時,狀況則複雜一些。

以刑事相關計算機信息安全法規條款看,當爬蟲涉及到破解、逆向以突破目標網站限制時(包括但不限於頻率、權限、驗證碼等)。一旦使用這些獲取的版權、商業信息引發糾紛、訴訟,有被認定爲破壞網絡安全的風險存在,最終結果如何徹底取決於公司的能力。

最後,即使是遵循 robots.txt,爬取的也是公開數據,可是由於爬取行爲形成目標主機故障的狀況,也有被斷定爲網絡攻擊的風險,涉及刑事犯罪。

相關文章
相關標籤/搜索