robots协议限制爬虫

599次阅读
没有评论

为什么需要robots协议

当前项目网站经常面临着被爬虫的风险。这些爬虫中有些是必要的,有些则是非要的,甚至是恶意的。漫无目的的爬虫将会极大消耗服务器带宽,在未经网站所有人许可的情况下随意复制、使用网站数据信息。同时,应当被爬虫的数据又不能保证搜索引擎编入索引文件中以增加曝光量。
而robots协议可以解决这些问题。seo建议各位仅当网站包含不希望被搜索引擎收录的内容时,才使用robots协议。如果您希望搜索引擎收录网站上所有内容,请勿建立robots.txt文件(robots协议的具体实现)。

网络爬虫爬取过程

互联网的网页都是通过超链接互相关联的,进而形成了网页的网状结构。所以爬虫的工作方法就如蜘蛛在网络上沿着超链接按照一定的爬取规则爬取网页。
robots协议限制爬虫
基本流程大致为:
1) 喂给爬虫一堆 URL,称之为 种子(Seeds);
2) 爬虫爬取 Seeds,分析 HTML 网页,抽取其中的 超链接;
3) 爬虫接着爬取这些 新发现 的超链接指向的 HTML 网页;
4) 对过程 2),3)循环往复;

robots是什么

Robots 协议(也称为爬虫协议等)的全称是「网络爬虫排除标准」(Robots Exclusion Protocol)。网站通过 Robots 协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。

robots工作原理

Robots 协议通过robots.txt 进行表述。
robots.txt(统一小写)是一个文本文件,存放于网站根目录下,任何一个常见的文本编辑器都可以查看或编辑它。
当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。
一个robots.txt只能控制相同协议,相同端口的网页抓取策略。

最简单的robots.txt

1、文件名统一小写,放置到网站根目录的路径下

2、文件内容
最简单的robots.txt只有两条规则:
  User-agent:指定对哪些爬虫生效
  Disallow:指定要屏蔽的网址
Allow:与Disallow正好相反,允许爬虫访问的路径。可与disallow配合使用,谁管的越细就听谁的,范围更明确时起作用。

举个栗子,以下为不允许任何操作引擎访问任何目录

User-agent: * Disallow: /

以下为不允许一淘spider、慧慧助手访问任何目录,不允许任何网站访问以“/login”或“/xy”开头的目录,但允许访问以"/xy-tb"开头的目录。

User-agent: * Disallow: /login Disallow: /xy Allow: /xy-tb User-agent: EtaoSpider Disallow: / User-agent: HuihuiSpider Disallow: /

验证方式

语法验证工具

https://www.websiteplanet.com/zh-hans/webtools/robots-txt/

百度测试工具

打开https://ziyuan.baidu.com/robots/index,在右侧输入网站地址,点击检测,如果在根目录下已放置robots.txt文档,则会在下方显示您的Robots文件已生效。
robots协议限制爬虫
在域名下输入指定路径进行校验,查看规则是否满足需求
robots协议限制爬虫
robots协议限制爬虫
robots协议限制爬虫
robots协议限制爬虫

google测试工具

https://support.google.com/webmasters/answer/6062598?hl=zh-Hans

通过Scrapy验证

scrapy默认支持robots协议
入门教程参考如下:
https://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html

使用爬虫的法律风险

robots协议并不是一个规范,而只是约定俗成的,不能保证被强制执行,所以并不能保证网站的隐私。在爬虫与反爬虫的对弈中,爬虫一定会胜利。因此对机密信息的保护并不能依赖robots协议。
关于Robots协议的法律属性,我国目前法律下并没有明确规定,但《互联网搜索引擎服务自律公约》第七条规定,“遵循国际通行的行业惯例与商业规则,遵守机器人协议(robots协议)”。第八条则规定“互联网站所有者设置机器人协议应遵循公平、开放和促进信息自由流动的原则,限制搜索引擎抓取应有行业公认合理的正当理由,不利用机器人协议进行不正当竞争行为,积极营造鼓励创新、公平公正的良性竞争环境。”
如前所述说,由于爬虫的批量访问会给网站带来巨大的压力和负担,因此许多网站经营者会采取技术手段,以阻止爬虫批量获取自己网站信息。常见的技术措施包括:(1)通过UA 识别爬虫、(2)设置IP访问频率,如果超过一定频率,弹出验证码(3)通过并发识别爬虫;(4)请求的时间窗口过滤统计;(5)限制单个ip/api token的访问量;(6)识别出合法爬虫(7)蜜罐资源等。
强行突破某些特定被爬方的技术措施,可能构成刑事犯罪行为。《刑法》第二百八十六条还规定,违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,构成犯罪,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。而违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,也构成犯罪,依照前款的规定处罚。
当前站点也采取了一定的技术措施,并在系统中记录有痕迹。可以通过这些措施识别出非合法爬虫,并保留法律追责权利。

附录

(一)常见语法属性

robots.txt整个文件分为x节,一节由y个User-agent行和z个Disallow行组成。一节就表示对User-agent行指定的y个爬虫屏蔽z个网址。这里x>=0,y>0,z>0。x=0时即表示空文件,空文件等同于没有robots.txt。
其它的还有allow、sitemap、Crawl-delay(貌似现在大多不支持了)等,但这些并不是所有引擎都支持的。
(1)、User-agent
  爬虫抓取时会声明自己的身份,这就是User-agent,如http协议里的User-agent,robots.txt利用User-agent来区分各个引擎的爬虫。
  举例说明:
  //指定google网页搜索引擎
User-agent:Googlebot
  //指定所有爬虫
  User-agent: *

(2)、Disallow
  Disallow行列出的是要拦截的网页,以正斜线 (/) 开头,可以列出特定的网址或模式。
  要屏蔽整个网站,使用正斜线即可,如下所示:
  Disallow: /
  要屏蔽某一目录以及其中的所有内容,在目录名后添加正斜线,如下所示:
  Disallow: /无用目录名/
  要屏蔽某个具体的网页,就指出这个网页,如下所示:
  Disallow: /网页.html

(3)、Allow ,允许访问
举个栗子,如下意为屏蔽seo开头,且不屏蔽seo50,但屏蔽seo50下的seo.html
Disallow:/seo
  Allow:/seo50/
  Disallow:/seo50/seo.html

(4)、sitemap
通知搜索引擎网站上有哪些可供抓取的网页,防止爬虫通过链接抓取不到该地址。
最简单的Sitepmap形式就是XML文件,也可以是html文件
Sitemap: /sitemap.html 告诉爬虫这个页面是网站地图。
示例如下:
https://www.fanhaobai.com/sitemap.xml

(5)、指定资源爬取频率
Request-rate: 用来限制URL的读取频率;
Crawl-delay: n 每次抓取间隔n秒;但是次数的含义,各个爬虫引擎略有不同;
Request-rate: x/n 每n秒抓取x个页面,避免重复抓取。

(二)基于路径值的网址匹配

*是一个通配符
.htm$ 仅允许访问以".htm"为后缀的URL
/pwd/ 即pwd目录下面的目录。
/pwd pwd的整个目录
/? 所有包含问号 (?) 的网址

(三)常见网站robots.txt

https://www.baidu.com/robots.txt
https://tieba.baidu.com/robots.txt
https://www.jd.com/robots.txt
https://www.taobao.com/robots.txt
https://www.zhihu.com/robots.txt
https://www.sogou.com/robots.txt
https://www.aliyun.com/robots.txt
https://cn.bing.com/robots.txt
https://www.google.com/robots.txt

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:Python教程2022-10-24发表,共计3600字。
新手QQ群:570568346,欢迎进群讨论 Python51学习