前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬虫,robots.txt和HTML的爬虫控制标签

爬虫,robots.txt和HTML的爬虫控制标签

作者头像
terrence386
发布2022-07-14 21:22:47
6300
发布2022-07-14 21:22:47
举报

学如逆水行舟,不进则退。

爬虫的概念

web爬虫是一种机器人,它会递归对站点进行遍历,然后沿着web的超链接进行数据爬取。

我们使用的搜索引擎本身也个大的爬虫。它将它碰到的文档全部拉取回来,然后对这些文档进行处理,形成一个可搜索的数据库。然后当用户查找的时候,返回用户需要的信息。

拒绝机器人访问

1994年,人们提出了一项简单的自愿约束技术,可以将爬虫阻挡在不适合它的地方之外,并为网站管理员提供了一种能够更好的控制机器人行为的机制。这个标准被称为拒绝机器人访问标准,但通常只是根据存储访问控制信息的文件将其称为robots.txt

Web站点和robots.txt文件

如果一个站点有robots.txt文件,那么访问这个站点的任意链接之前,爬虫都必须获取这个robotx.txt文件并对之进行处理。

爬虫获取robots.txt

  • 获取方式

爬虫会用GET方法来获取robots.txt的资源。如果有robots.txt文件的话,服务器会将其放在一个text/plain主体中返回。如果服务器以404 Not Found Http状态码进行响应,爬虫会认为这个服务器上没有爬虫访问限制,就可以请求任意文件。

  • 响应码

很多站点都没有robots.txt资源,但爬虫并不知道这个事儿。它必须尝试从每个站点上获取robots.txt资源。爬虫会对简索结果采取不同的策略。

  • 如果服务器以一个成功状态(HTTP状态码2xx)为响应,爬虫就必须对robots.txt进行解析,并使用排斥规则从站点上获取内容。
  • 如果服务器说资源不存在(HTTP状态码404)为响应,爬虫就认为服务器没有激活任何排斥规则,从站点上获取内容不受限制。
  • 如果服务器说资源存在访问权限(HTTP状态码401或403)为响应,爬虫就认为从站点上获取内容是完全受到限制。
  • 如果请求出现故障(HTTP状态码503),爬虫推迟从站点上获取内容,直到能获取robots.txt为止。
  • 如果请求出重定向(HTTP状态码3xx),爬虫就跟着重定向,直到能获取robots.txt为止。

robots.txt文件格式

robots.txt文件的语法非常简单。有点像我们平时写的请求头信息。

代码语言:javascript
复制
User-Agent: slurp
User-Agent: webcrawler
Disallow: /user

文件中的每条记录都为一组特定的爬虫描述了一组排斥规则。通过这个方式,可以为不同的爬虫使用不同的排斥规则。

  • User-Agent

每个爬虫记录都以一个或多个下列形式的User-Agent行开始:

代码语言:javascript
复制
User-Agent: <spider-name>

代码语言:javascript
复制
User-Agent: *

爬虫在HTTP GET请求的请求头User-Agent中发送爬虫名称。在处理robots.txt文件时,必须遵循以下规则之一:

  • 第一个<spider-name>是爬虫名字的大小写无关的字符串。
  • 第一个<spider-name>*

如果爬虫无法找到与其名字相匹配的User-Agent行,并且也无法找到通配的User-Agent行,那说明没有记录与之匹配,访问不受限。

  • DisallowAllow

DisallowAllow行跟在爬虫排斥记录的User-Agent行之后。用来说明显示禁止或显示允许特定爬虫使用哪些url路径。

爬虫必须将期望访问的URL按序与排斥记录中所有的Disallow和Allow规则进行匹配。使用找到的第一个匹配项。如果没有找到匹配项,就说明允许使用这个URL。

要使Allow/Disallow行与一个URL像匹配,规则路径必须是URL路径大小写相关的前缀。例如:Disallow:/tmp 就和下面所有的URL相匹配:

代码语言:javascript
复制
http://909500.club/tmp
http://909500.club/tmp/
http://909500.club/tmp/es6.html

如果规则路径为空字符串,就与所有内容都匹配

HTML的爬虫控制标签

在写HTML的时候我们可以使用一种更直接的方式控制爬虫能访问哪些页面。我们可以借助元信息标签meta来实现:

代码语言:javascript
复制
<meta name="robots" content="爬虫控制指令">

爬虫控制指令

  • NOINDEX 告诉爬虫不对页面内容进行处理,忽略文档。
代码语言:javascript
复制
<meta name="robots" content="NOINDEX">
  • NOFLLOW 告诉爬虫不要爬这个页面的任何外连接。
代码语言:javascript
复制
<meta name="robots" content="NOFLLOW">
  • FLLOW 告诉爬虫可以爬这个页面的任何外连接。
代码语言:javascript
复制
<meta name="robots" content="FLLOW">
  • NOARCHIVE 告诉爬虫不应该缓存这个页面的本地副本。
代码语言:javascript
复制
<meta name="robots" content="NOARCHIVE">
  • ALL 等价于 INDEX, FLLOW
  • NONE 等价于 NOINDEX, NOFLLOW

总结

robot.txt相信有一部分人应该遇到过,其实也并不一定非得在站点的目录里加上这个文件,也可以通过web服务器去返回一个相同的内容。

比如:微信小程序或者公众号开发的时候需要上传校验文件,很多后端的同学有时候嫌上传麻烦,直接在nginx里echo一个相同的内容。

robots.txt也可以用echo进行返回。

javascript基础知识总结

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JavaScript高级程序设计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 爬虫的概念
  • 拒绝机器人访问
  • Web站点和robots.txt文件
  • 爬虫获取robots.txt
  • robots.txt文件格式
  • HTML的爬虫控制标签
  • 爬虫控制指令
  • 总结
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档