今日头条,最近又上头条了。
2019 上半年,今日头条正式公布开始做搜索引擎。本来单纯的以为头条和微信一样,做的是垂直搜索或者站内搜,没想到做的是抓取全网内容的全新搜索引擎。
这个决定其实也是在情理之中。毕竟头条系产品现在的流量已经到了一个很恐怖的量级,扩展做搜索具有天然的优势。
但我们今天不聊“字节跳动搜索能否干翻百度”,只想说一下轰轰烈烈的「搜索大战」之下,头条的一个操作让很多小网站「痛苦不堪」。
我们的社区用户很多都有自己的个人网站和博客,虽然流量有高有低,毕竟是大家自己的后花园。
但最近,很多社区用户纷纷跟我反馈,一种名为 Bytespider 的爬虫爬取他们的网站信息的频率太高,直接把网站搞瘫痪了。大家顺着爬虫的 IP 地址查了一下,发现 Bytespider 应该就是今日头条的搜索爬虫。
更有甚者,短短一上午时间就收到了 46 万次请求,消耗掉服务器 7 .42GB 流量。这对平均日活可能都没有过千的小网站来说,已经算得上一次小型的 DDoS 攻击了...
为什么会有爬虫?
爬虫就是自动抓取网络内容的一种程序,它会定时定量的把互联网上的内容爬下来,汇总存储到自己的服务器上。放到搜索引擎上来说,我们每次搜索的时候,搜索引擎就会在这些爬取到的内容里进行匹配相似度高的内容反馈给你。
所以做搜索引擎的公司离不开爬虫。大公司也都会给自己的爬虫起一个名字:谷歌的爬虫叫 Googlebot,百度的爬虫是 Baiduspider,搜狗的爬虫 Sogouspider,而今日头条就是上文中的 Bytespider。
扯远了,我们继续讨论开头的这个事情。为什么之前别的搜索引擎爬取内容就没事儿,头条一爬小网站就崩溃了呢?
其实从今年 6 月开始就有网站主抱怨了这个 Bytespider。而且从今年 6 月到 10 月,越来越多的人开始在网上爆料自己也遇到了类似的情况。在国外的编程交流网站上大家也有讨论啥是「Bytespider」,并且指出它非常不地道的无视了自己网站的 robots.txt 协议:
什么是 robots.txt 协议?
即使不是运维工程师,关注互联网的人应该也听说过 robots 协议。当年的 3Q 大战就涉及到了一场关于屏蔽与反屏蔽的争论,也把原本非常小众的 robots 协议变成了媒体热词。
robots 协议的出现要追溯到 1994 年。
在互联网的蛮荒发展时代,搜索引擎可以通过爬虫直接进入网站的管理后台,把所有网页信息全部收录。除了涉及隐私外,爬虫程序的反复收录在 20 年前对网站带宽也是不小的负载。
面对这个情况,荷兰工程师 Martin Koster 提出通过设立名为 robots 规范的网站访问限制政策,来解决网络爬虫带来的潜在风险与威胁,这一提议收到了广泛的认可与应用。
robots 协议自成立以来在全球受到严格遵守,也获得了很多的成效。我们还是通过一个 3Q 大战为例子,来看一下 robot.txt 协议的价值。
两大搜索巨头的战役,可谓牵一发而动全身,甚至逼迫了全网站队。但最终的诉讼结果,也让行业有了一个法律层面的参考。
在百度诉 360 一案中,法院认定 robots 协议虽然不是法律意义上的合同,但属于“搜索引擎行业内公认的、应当被遵守的商业道德”,如果违反 robots 协议、爬取网站明确不允许爬取的内容,会构成违反《反不正当竞争法》第二条的原则性规定:“经营者在市场交易中,应当遵循自愿、平等、公平、诚实信用的原则,遵守公认的商业道德。”
但另一方面,robots 协议本身也不能不合理的限制特定爬虫。就像 360 提出百度的 robots 协议允许谷歌、微软必应、雅虎、搜狗等搜索引擎抓取,但却不允许 360 抓取内容,同样属于不正当竞争与限制。
法院也认定,在 360 向百度提出修改 robots 协议的主张之后,百度未能在合理期限内说明拒绝 360 爬取的合理理由,所以从这个时点之后,360 的爬取行为不再构成不正当竞争。
爬虫的法律风险
如果避开反爬措施,除了构成不正当竞争,还有可能引发刑事责任。我们还是用头条的一个案子来做案例,不过这次他们的身份是「被爬方」。
之前,有一家上海的企业破解了字节跳动的防抓取措施,使用「tt_spider」文件进行视频数据的抓取,经法院判定,造成了字节跳动的技术服务费损失 2 万元。最终判处该公司罚金 20 万元,主管人员罚金 3 - 5 万元不等、有期徒刑 9 个月到 1 年不等。
爬虫的滥用终于被制裁了,但事情都是有正反两面的。反爬取措施的滥用又如何规范与避免?
如果反爬措施被滥用,就像 3Q 大战中不合理的限制竞争对手、维持垄断地位,是否也不利于数字信息共享、促进竞争?如何平衡两方面的利益,可能通过未来的案例会衍生出更精密的机制。
需要注意,上面我们提到的两种情况中,是否构成非法获取罪或者不正当竞争,与数据是否为公开信息是没有关系的。即使获取的数据为公开信息,也不影响定性。
最后,即使上述情形都不涉及(既没有违反Robots协议、也没有反爬措施、所有数据都是公开信息),也不可以随意爬取。如果你对爬取数据的使用,侵犯了对方的商业价值,仍然有可能构成不正当竞争。
这个在我们平台就是一个很好的例子,比如我们社区网站的文章、问答内容经常被非法的爬取搬运。在这里不展开详细的讨论,但还是想要号召大家都能够遵守一下基本的操守和底线。
如何避免被爬虫「误伤」?
就像这次 Bytespider 的爬虫,虽然不算是 DDos,但对于很多小网站来说真的「遭不住」。
除了 robots.txt 封禁之外,主动的做法可能就是在服务器上直接识别爬虫名称然后进行封禁,同时也可以在服务器上封禁爬虫的服务器等。比如:
- 在 robots.txt 协议中封禁或者限制相关爬虫 User-agent;
- 在服务器上或者 CDN 节点上屏蔽相关爬虫的 IP 段;
- Nginx 服务器也可以封禁相关的爬虫 User-agent;
总而言之,爬虫有风险,爬取需谨慎。
越是大体量的公司,越应该遵守社会规则、承担社会责任。在数据泛滥、科技进步的时代,合法与违法之间存在很多灰色地带,相关的法律法规也还有待完善,但我们作为社会中的一员,作为承担着社会责任的「社会人」,还是要尽量的遵守我们自己的道德底线。
别老想着钻空子,给别人添堵的最后,难免会给自己招来麻烦。