文章目录
- [robots.txt 是什么](#robots.txt 是什么)
- 以zoopla为例分析
-
- [1)robots.txt 的基本读法(先建立规则脑图)](#1)robots.txt 的基本读法(先建立规则脑图))
- [2)你这份 robots.txt:逐段(逐行簇)解释](#2)你这份 robots.txt:逐段(逐行簇)解释)
-
- [A. 文件开头的 ASCII 画](#A. 文件开头的 ASCII 画)
- [B. 第一段:通用规则(对所有爬虫)](#B. 第一段:通用规则(对所有爬虫))
-
- [你应该怎么读这些 Disallow?](#你应该怎么读这些 Disallow?)
-
- 1)屏蔽"功能页/动态接口/内部系统"
- [2)屏蔽"带参数的搜索页 / 重复内容页"](#2)屏蔽“带参数的搜索页 / 重复内容页”)
- 3)屏蔽"核心业务详情页(尤其房源详情)"
- [C. 两行注释式 Disallow(被注释掉了)](#C. 两行注释式 Disallow(被注释掉了))
- [D. "看起来像 bug 的规则"要警惕](#D. “看起来像 bug 的规则”要警惕)
- [E. "Allow" 的作用:在大范围 Disallow 里开例外](#E. “Allow” 的作用:在大范围 Disallow 里开例外)
- [F. 针对特定爬虫的专门规则(从这里开始,每段都是新的作用域)](#F. 针对特定爬虫的专门规则(从这里开始,每段都是新的作用域))
-
- [1)Baidu 的专门限制](#1)Baidu 的专门限制)
- 2)Slurp(雅虎爬虫)全站封
- 3)一堆"点名封禁"的爬虫
- [4)例外:放行 Google Ads 和 grapeshot](#4)例外:放行 Google Ads 和 grapeshot)
- [G. Sitemap:告诉爬虫"去这些地址拿 URL 清单"](#G. Sitemap:告诉爬虫“去这些地址拿 URL 清单”)
- [3)读 robots.txt 的实战步骤(拿任何站都通用)](#3)读 robots.txt 的实战步骤(拿任何站都通用))
- [4)你这份 robots.txt 一句话总结它的策略](#4)你这份 robots.txt 一句话总结它的策略)
robots.txt 是什么
robots.txt 是网站根目录下的一个文本文件(通常地址形如 https://example.com/robots.txt),用来告诉搜索引擎的爬虫(robots):
哪些路径可以抓取(Allow)
哪些路径不要抓取(Disallow)
有时还会提供 站点地图(Sitemap) 的地址
也可能针对不同爬虫设置不同规则(User-agent)
它本质上是一个"爬虫访问建议/规则声明",属于 Robots Exclusion Protocol 的常见用法。
以zoopla为例分析
- 以网站
zoopla为例,分析网站的robots.txt

王先生,你贴出来的是一个典型的 robots.txt(给爬虫看的"抓取规则说明书")。我按"怎么读"和"你这份文件逐段在说什么"两条线,把它逐行拆开讲清楚。
1)robots.txt 的基本读法(先建立规则脑图)
robots.txt 通常由几类指令组成:
- User-agent: 指定"这段规则给谁看"(哪个爬虫/机器人)。
- Disallow: 不允许抓取的路径前缀/模式。
- Allow: 允许抓取的路径(常用于在 Disallow 很宽时开小口子)。
- Sitemap: 站点地图地址(告诉爬虫去哪找 URL 清单)。
# ...:注释,不生效。
匹配机制(核心)
- 规则一般按"路径前缀/模式"匹配 URL 的 path + query(实现上不同爬虫略有差异,但大体如此)。
- 最常见原则:更具体(更长、更精确)的规则优先。
Disallow:为空通常表示"全部允许"(你这份里没有这个形式)。*通配符:匹配任意字符序列(Google/Bing 支持;有些爬虫不完全支持)。$结尾锚点:匹配到 URL 末尾(同样是主流搜索引擎支持的扩展)。
2)你这份 robots.txt:逐段(逐行簇)解释
A. 文件开头的 ASCII 画
txt
# ___ ...
- 全是
#开头 → 注释,纯装饰,不影响规则。
B. 第一段:通用规则(对所有爬虫)
txt
User-agent: *
*代表 所有爬虫 。下面直到下一个User-agent:出现之前的规则,都属于它。
接下来大量:
txt
Disallow: */sort.html*
Disallow: /*?st=EORST*
...
Disallow: /property/
...
Allow: /new-homes/retirement/uk/
...
Disallow: /agent-valuation/
你应该怎么读这些 Disallow?
把它们分三类看会很快:
1)屏蔽"功能页/动态接口/内部系统"
例如:
/ajax/cgi-bin/api/*/dynimgs/widgets/graph
这些通常是 接口或动态资源,对搜索没价值、还容易被滥抓,禁掉很正常。/signin*/myaccount/myzoopla/tracking/
这是 登录/账户/跟踪相关,必须禁。
2)屏蔽"带参数的搜索页 / 重复内容页"
例如:
Disallow: /*?st=EORST*Disallow: /*?rpn=*Disallow: /*q=、Disallow: /*?qpn=
这类是 query string (?后参数)导致的无穷组合,容易造成"重复抓取"和"爬虫陷阱",所以封掉。
你还能看到很多"参数名":
identifier、url、image、feature、search_source、include_sold、new_homes等
本质都是:别抓带这些参数的 URL。
3)屏蔽"核心业务详情页(尤其房源详情)"
你这里非常关键的一句:
txt
Disallow: /property/
这表示:对 User-agent: * 的爬虫,所有 /property/ 开头的页面都不让抓 。
对房产站来说这很典型:房源详情价值高、抓取压力大、又涉及商业策略,所以往往默认封掉,改让"合作渠道/特定爬虫/站内方式"访问。
还有类似:
/property-history/、/property/claim/、/property/estimate/等
都是围绕房产的衍生功能页。
C. 两行注释式 Disallow(被注释掉了)
txt
# Disallow: /property/location/edit/*
# Disallow: /property/edit/
- 以
#开头 → 这两条当前不生效 。
但它透露了:站点曾考虑/曾经屏蔽这些编辑相关路径。
D. "看起来像 bug 的规则"要警惕
你这份里有几条像这样:
txt
Disallow: /*seo_is_keyword
Disallow: /*search_source=facets
Disallow: /*include_sold=
Disallow: /*business_for_sale=
Disallow: /*search-path=
注意:它们末尾没有 * 或明确的终止符 ,也没有 $。
这通常仍然能匹配以该字符串开头的路径片段(实现相关),但从写法看更像"希望屏蔽某类参数但没写完整"。遇到这种,你读法是:
- 先按字面理解:凡 URL 中出现这些片段就不想被抓;
- 再意识到:不同爬虫对这种"半截模式"的支持不一,可能存在"规则写得不严谨"。
E. "Allow" 的作用:在大范围 Disallow 里开例外
你这里有:
txt
Disallow: /new-homes/retirement/*/
Allow: /new-homes/retirement/uk/
意思是:
- 先封掉
/new-homes/retirement/下的大量页面(可能太多、太重复) - 但 明确允许
/new-homes/retirement/uk/这个入口/聚合页被抓取
这就是典型的"先大封,再开白名单"。
F. 针对特定爬虫的专门规则(从这里开始,每段都是新的作用域)
1)Baidu 的专门限制
txt
# Baidu restricted to for sale and new homes
User-agent: Baiduspider
Disallow: /to-rent/
Disallow: /home-values/
Disallow: /house-prices/
Disallow: /find-agents/
Disallow: /market/
Disallow: /property/
Disallow: /askme/
解读:
- 这段只对 Baiduspider 生效。
- 注释说得很直白:只让百度抓"出售/新房"相关,其他不让抓。
- 再次强调
/property/也封,说明房源详情对百度也不给。
2)Slurp(雅虎爬虫)全站封
txt
User-agent: Slurp
Disallow: /
/表示从根开始全封 → 完全不允许抓取。
3)一堆"点名封禁"的爬虫
比如:
txt
User-agent: proximic
Disallow: /
User-agent: PetalBot
Disallow: /
User-agent: SpriftCrawler
Disallow: /
...
User-agent: spider
Disallow: /
...
这类就是:
- 站点认为这些 UA 抓取行为不友好/无价值/压力大 → 直接封全站。
4)例外:放行 Google Ads 和 grapeshot
txt
User-agent: Mediapartners-Google
Disallow:
User-agent: grapeshot
Disallow:
Disallow:后面是空 → 通常表示 不禁止任何路径(等价于"全站允许")。- Mediapartners-Google 是 Google Ads 相关的爬虫,站点希望广告系统能访问页面内容做投放/匹配,所以放行。
G. Sitemap:告诉爬虫"去这些地址拿 URL 清单"
txt
Sitemap: https://www.zoopla.co.uk/xmlsitemap/sitemap/index.xml.gz
Sitemap: https://www.zoopla.co.uk/xmlsitemap/manual_sitemap/commercial_srp_sitemap.txt.gz
...
Sitemap: https://www.zoopla.co.uk/xmlsitemap/new-sitemap/sitemap-index.xml
解读要点:
- robots.txt 不是用来列出所有可抓 URL 的;真正给搜索引擎喂 URL 的主要靠 sitemap。
- 这里提供了多个 sitemap(不同业务线:commercial、overseas、area_guides、student_accom 等)。
.gz是压缩的 sitemap,常见。
3)读 robots.txt 的实战步骤(拿任何站都通用)
-
先找
User-agent: *这是"默认规则"。大部分爬虫至少会看它。
-
再找你关心的爬虫名字 (Googlebot、Baiduspider、bingbot...)
如果有专门段落,就以专门段落为主(一般会覆盖默认)。
-
把 Disallow 分组:
- 登录/账户/后台
- 接口/动态资源
- 搜索页(带 query 参数)
- 详情页(高价值内容)
你会立刻看懂站点"怕什么、想保护什么"。
-
看 Allow 是否在"封禁大目录"里开口子
这种最容易误读。
-
最后看 Sitemap :
robots 决定"能不能抓",sitemap 决定"抓什么更高效"。
4)你这份 robots.txt 一句话总结它的策略
- 对所有爬虫 :强力屏蔽搜索/参数页、接口、账户页,并且把 /property/ 这类房源详情大目录也封掉。
- 对某些爬虫:直接全站封(Slurp、PetalBot 等)。
- 对广告爬虫:放行。
- 用多个 Sitemap 把可索引内容按业务拆开供抓取。