答案页 · 12 道题

Python robots.txt 与礼貌抓取练习答案

本页汇总 Python robots.txt 与礼貌抓取 的 12 道练习。先做练习页,再回到这里核对准确答案和原因。

快速答案

本答案页包含 Python robots.txt 与礼貌抓取 的 4 道选择题、4 道填空题和 4 道输出预测题,每题都给出准确答案和简短解释。

答案已完整展示,建议先尝试作答,再用本页核对。第一次练习最好从互动练习页开始。

01 · 选择题

Disallow: /private 是什么意思?

  1. 爬虫必须使用浏览器
  2. 该路径已加密
  3. 页面不存在
  4. 匹配的爬虫不应抓取 /private 下的路径正确答案

答案: 匹配的爬虫不应抓取 /private 下的路径

为什么: Disallow 为匹配的 User-agent 发布抓取偏好。

02 · 选择题

robots.txt 通常发布在哪里?

  1. 只在 sitemap 里
  2. CSS 文件夹里
  3. 每个 HTML 页面里
  4. 站点根目录的 /robots.txt正确答案

答案: 站点根目录的 /robots.txt

为什么: 爬虫会查找站点根目录下的 /robots.txt。

03 · 选择题

收到 429 响应后,爬虫应该怎么做?

  1. 放慢速度,稍后重试正确答案
  2. 忽略状态直接解析页面
  3. 改 URL 绕过限制
  4. 立即在循环中重试

答案: 放慢速度,稍后重试

为什么: 429 表示请求过多;应退避,并遵守响应中的 Retry-After。

04 · 选择题

对公开页面,哪种做法合适?

  1. 绕过登录墙
  2. 在站点条款范围内只收集需要的公开字段正确答案
  3. 没有依据地收集个人数据
  4. 因为页面能打开就无视 robots.txt

答案: 在站点条款范围内只收集需要的公开字段

为什么: 公开可访问不代表可以无视条款、隐私或抓取限制。

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 道题。

练习本课