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,爬取的也是公开数据,可是由于爬取行为形成目标主机故障的状况,也有被断定为网络攻击的风险,涉及刑事犯罪。

相关文章
相关标签/搜索