答案頁 · 12 道題

Python robots.txt 與禮貌抓取練習答案

本頁彙整 Python robots.txt 與禮貌抓取 的 12 道練習。先做練習頁,再回到這裡核對準確答案和原因。

快速答案

本答案頁包含 Python robots.txt 與禮貌抓取 的 4 道選擇題、4 道填空題和 4 道輸出預測題,每題都給出準確答案和簡短解釋。

答案已完整展示,建議先嘗試作答,再用本頁核對。第一次練習最好從互動練習頁開始。

01 · 選擇題

Disallow: /private 是什麼意思?

  1. 爬蟲必須使用瀏覽器
  2. 比對的爬蟲不應抓取 /private 下的路徑正確答案
  3. 該路徑已加密
  4. 頁面不存在

答案: 比對的爬蟲不應抓取 /private 下的路徑

為什麼: Disallow 為比對的 User-agent 發布抓取偏好。

02 · 選擇題

robots.txt 通常發布在哪裡?

  1. 站點根目錄的 /robots.txt正確答案
  2. 每個 HTML 頁面裡
  3. 只在 sitemap 裡
  4. CSS 資料夾裡

答案: 站點根目錄的 /robots.txt

為什麼: 爬蟲會尋找站點根目錄下的 /robots.txt。

03 · 選擇題

收到 429 回應後,爬蟲應該怎麼做?

  1. 忽略狀態直接解析頁面
  2. 立即在迴圈中重試
  3. 改 URL 繞過限制
  4. 放慢速度,稍後重試正確答案

答案: 放慢速度,稍後重試

為什麼: 429 表示請求過多;應退避,並遵守回應中的 Retry-After。

04 · 選擇題

對公開頁面,哪種做法合適?

  1. 因為頁面能打開就無視 robots.txt
  2. 沒有依據地收集個人資料
  3. 在站點條款範圍內只收集需要的公開欄位正確答案
  4. 繞過登入牆

答案: 在站點條款範圍內只收集需要的公開欄位

為什麼: 公開可存取不代表可以無視條款、隱私或抓取限制。

05 · 填空題

補全指定爬蟲分組的指令。

line = "____: *"
key = line.split(":", 1)[0]
print(key)

答案: User-agent

為什麼: User-agent 開始一組面向指定客戶端的規則。

06 · 填空題

補全阻止路徑的指令。

robots = "User-agent: *\nDisallow: /private"
for line in robots.splitlines():
    if line.startswith("____"):
        print(line)

答案: Disallow

為什麼: Disallow 標記比對爬蟲不應抓取的路徑。

07 · 填空題

補全設定請求間隔的指令。

key = "____"
print(key in {"User-agent", "Disallow", "Crawl-delay", "Sitemap"})

答案: Crawl-delay

為什麼: Crawl-delay 為爬蟲分組建議請求之間的暫停時間。

08 · 填空題

補全指向站點地圖的指令。

line = "____: https://example.com/sitemap.xml"
print(line.startswith("Sitemap"))

答案: Sitemap

為什麼: Sitemap 為爬蟲提供站點地圖的 URL。

09 · 輸出預測

這段程式列印出什麼?

robots = "User-agent: *\nDisallow: /private\nCrawl-delay: 2"
rules = {}
for line in robots.splitlines():
    if ":" in line:
        key, value = line.split(":", 1)
        rules[key.strip().lower()] = value.strip()
print(rules["disallow"])

答案: /private

為什麼: Disallow 的值是 /private。

10 · 輸出預測

程式碼的輸出結果是什麼?

robots = "User-agent: *\nDisallow: /private\nCrawl-delay: 2"
rules = {}
for line in robots.splitlines():
    if ":" in line:
        key, value = line.split(":", 1)
        rules[key.strip().lower()] = value.strip()
print(rules["crawl-delay"])

答案: 2

為什麼: Crawl-delay 的值是字串 2。

11 · 輸出預測

螢幕上會顯示什麼?

rules = [("allow", "/docs"), ("disallow", "/private")]
path = "/private/report"
decision = "allowed"
for kind, prefix in rules:
    if path.startswith(prefix):
        decision = kind
print(decision)

答案: disallow

為什麼: 路徑比對更具體的 /private 規則,所以結果是 disallow。

12 · 輸出預測

這段程式碼會輸出什麼?

record = {"name": "Ada", "email": "[email protected]", "bio": "Python"}
public = {key: value for key, value in record.items() if key != "email"}
print(public)

答案: {'name': 'Ada', 'bio': 'Python'}

為什麼: 字典推導式刪除了 email 欄位。

先試一遍題目

打開 Python robots.txt 與禮貌抓取 練習頁,用即時回饋回答同樣的 12 道題。

練習本課