robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它一般告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不该被搜索引擎的漫游器获取的,哪些是能够被漫游器获取的。由于一些系统中的URL是大小写敏感的,因此robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。若是想单独定义搜索引擎的漫游器访问子目录时的行为,那么能够将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。前端
robots.txt 协议并非一个规范,只是约定协议,并不能保护网站的隐私。python
参考资料:
robots.txt 文件简介
The Web Robots Pagesnginx
robots.txt
须要在网站根路径下能够访问,而且只能是小写,一般是存放一个文本文件命名为 robots.txt
,例如:https://www.jd.com/robots.txt
。git
robots.txt
结构也很简单,经过 User-agent
针对不一样的爬虫设置,使用 Disallow
来指定不容许访问的路径。github
User-agent: spider_name
Disallow: /disallow_uri_path
复制代码
参考资料:
Robots exclusion standardweb
标准的 robots.txt
中 User-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
用于配置可供爬虫访问的镜像站。
*
支持标准 robots
在 Disallow
中不支持使用通配符,扩展标准则容许。
参考资料:
漫游器元标记、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
,爬取的也是公开数据,可是由于爬取行为形成目标主机故障的状况,也有被断定为网络攻击的风险,涉及刑事犯罪。