本答案页包含 Python robots.txt 与礼貌抓取 的 4 道选择题、4 道填空题和 4 道输出预测题,每题都给出准确答案和简短解释。
答案已完整展示,建议先尝试作答,再用本页核对。第一次练习最好从互动练习页开始。
Disallow: /private 是什么意思?
答案: 匹配的爬虫不应抓取 /private 下的路径
为什么: Disallow 为匹配的 User-agent 发布抓取偏好。
robots.txt 通常发布在哪里?
答案: 站点根目录的 /robots.txt
为什么: 爬虫会查找站点根目录下的 /robots.txt。
收到 429 响应后,爬虫应该怎么做?
答案: 放慢速度,稍后重试
为什么: 429 表示请求过多;应退避,并遵守响应中的 Retry-After。
对公开页面,哪种做法合适?
答案: 在站点条款范围内只收集需要的公开字段
为什么: 公开可访问不代表可以无视条款、隐私或抓取限制。
补全指定爬虫分组的指令。
line = "____: *"
key = line.split(":", 1)[0]
print(key)答案: User-agent
为什么: User-agent 开始一组面向指定客户端的规则。
补全阻止路径的指令。
robots = "User-agent: *\nDisallow: /private"
for line in robots.splitlines():
if line.startswith("____"):
print(line)答案: Disallow
为什么: Disallow 标记匹配爬虫不应抓取的路径。
补全设置请求间隔的指令。
key = "____"
print(key in {"User-agent", "Disallow", "Crawl-delay", "Sitemap"})答案: Crawl-delay
为什么: Crawl-delay 为爬虫分组建议请求之间的暂停时间。
补全指向站点地图的指令。
line = "____: https://example.com/sitemap.xml"
print(line.startswith("Sitemap"))答案: Sitemap
为什么: Sitemap 为爬虫提供站点地图的 URL。
这段程序打印出什么?
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。
代码的输出结果是什么?
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。
屏幕上会显示什么?
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。
这段代码会输出什么?
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 道题。