今日头条的 ByteSpider,怎么就成了小网站的“噩梦”?
收藏

来自公众号:SegmentFault

今日头条,最近又上头条了。


2019 上半年,今日头条正式公布开始做搜索引擎。本来单纯的以为头条和微信一样,做的是垂直搜索或者站内搜,没想到做的是抓取全网内容的全新搜索引擎。 



这个决定其实也是在情理之中。毕竟头条系产品现在的流量已经到了一个很恐怖的量级,扩展做搜索具有天然的优势。


但我们今天不聊“字节跳动搜索能否干翻百度”,只想说一下轰轰烈烈的「搜索大战」之下,头条的一个操作让很多小网站「痛苦不堪」。


图片来源:蓝点网


我们的社区(sifou.com)用户很多都有自己的个人网站和博客,虽然流量有高有低,毕竟是大家自己的后花园。


但最近,很多社区用户纷纷跟我反馈,一种名为 Bytespider 的爬虫爬取他们的网站信息的频率太高,直接把网站搞瘫痪了。大家顺着爬虫的 IP 地址查了一下,发现 Bytespider 应该就是今日头条的搜索爬虫。


更有甚者,短短一上午时间就收到了 46 万次请求,消耗掉服务器 7 .42GB 流量。这对平均日活可能都没有过千的小网站来说,已经算得上一次小型的 DDoS 攻击了...

名词解析:DDos攻击

分布式拒绝服务(DDoS:Distributed Denial of Service)攻击,是指攻击者利用大量“肉鸡”对攻击目标发动大量的正常或非正常请求、耗尽目标主机资源或网络资源,从而使被攻击的主机不能为正常用户提供服务。

为什么会有爬虫?

名词解析:网络爬虫

web crawler,也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人。其目的一般为编纂网络索引。网络搜索引擎等站点通过爬虫软件更新自身的网站内容或其对其他网站的索引。网络爬虫可以将自己所访问的页面保存下来,以便搜索引擎事后生成索引供用户搜索。爬虫访问网站的过程会消耗目标系统资源。


爬虫就是自动抓取网络内容的一种程序,它会定时定量的把互联网上的内容爬下来,汇总存储到自己的服务器上。放到搜索引擎上来说,我们每次搜索的时候,搜索引擎就会在这些爬取到的内容里进行匹配相似度高的内容反馈给你。


所以做搜索引擎的公司离不开爬虫。大公司也都会给自己的爬虫起一个名字:谷歌的爬虫叫 Googlebot,百度的爬虫是 Baiduspider,搜狗的爬虫 Sogouspider,而今日头条就是上文中的 Bytespider。


扯远了,我们继续讨论开头的这个事情。为什么之前别的搜索引擎爬取内容就没事儿,头条一爬小网站就崩溃了呢?


其实从今年 6 月开始就有网站主抱怨了这个 Bytespider。而且从今年 6 月到 10 月,越来越多的人开始在网上爆料自己也遇到了类似的情况。在国外的编程交流网站上大家也有讨论啥是「Bytespider」,并且指出它非常不地道的无视了自己网站的 robots.txt 协议:


“Given they don't respect the robots.txt file,I'd consider them block-fodder.”

什么是 robots.txt 协议?

名词解析:robots.txt 协议
也称为爬虫协议、爬虫规则、机器人协议等。robots.txt文件是存储在网站根目录下的 txt 文本文档。这是网站和蜘蛛之间的协议。该网站告诉搜索引擎哪些页面可以被抓取,哪些页面不想通过机器人协议被抓取。

即使不是运维工程师,关注互联网的人应该也听说过 robots 协议。当年的 3Q 大战就涉及到了一场关于屏蔽与反屏蔽的争论,也把原本非常小众的 robots 协议变成了媒体热词。


robots 协议的出现要追溯到 1994 年。


在互联网的蛮荒发展时代,搜索引擎可以通过爬虫直接进入网站的管理后台,把所有网页信息全部收录。除了涉及隐私外,爬虫程序的反复收录在 20 年前对网站带宽也是不小的负载。


面对这个情况,荷兰工程师 Martin Koster 提出通过设立名为 robots 规范的网站访问限制政策,来解决网络爬虫带来的潜在风险与威胁,这一提议收到了广泛的认可与应用


robots 协议自成立以来在全球受到严格遵守,也获得了很多的成效。我们还是通过一个 3Q 大战为例子,来看一下 robot.txt 协议的价值。

名词解析:3Q 大战

2010 年 9 月 27 日,360 发布了其新开发的「隐私保护器」,专门搜集 QQ 软件是否侵犯用户隐私。随后,QQ 立即指出 360 浏览器涉嫌借黄色网站推广。2010 年 11 月 3 日,腾讯宣布在装有 360 软件的电脑上停止运行 QQ 软件,用户必须卸载 360 软件才可登录 QQ,强迫用户“二选一”。双方为了各自的利益,从 2010 年到 2014 年,两家公司上演了一系列互联网之战,并走上了诉讼之路。

两大搜索巨头的战役,可谓牵一发而动全身,甚至逼迫了全网站队。但最终的诉讼结果,也让行业有了一个法律层面的参考。


在百度诉 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;
据蓝点网最新更新的声明中显示,头条搜索已经对网络上提到的各类问题进行优化升级,后续头条搜索还将不断完善和迭代,努力为站长们提供更好的体验。
如果后续发现其他问题或者有任何意见建议,站长和网站管理员们均可发送邮件到 bytespider@bytedance.com 进行反馈。
总而言之,爬虫有风险,爬取需谨慎。

越是大体量的公司,越应该遵守社会规则、承担社会责任。在数据泛滥、科技进步的时代,合法与违法之间存在很多灰色地带,相关的法律法规也还有待完善,但我们作为社会中的一员,作为承担着社会责任的「社会人」,还是要尽量的遵守我们自己的道德底线。

别老想着钻空子,给别人添堵的最后,难免会给自己招来麻烦。
部分资料来源:
蓝点网:头条搜索还没有推出但派出的ByteSpider爬虫令小网站痛苦不堪 ...
stackoverflow:What is the “Bytespider” user agent?
知乎话题:带有 Bytespider 字样的 UserAgent 是不是字节跳动的?
差评:爬信息爬到服务器瘫痪,今日头条的头条搜索成了小网站的噩梦!


对于 ByteSpider 爬取事件,头条搜索技术团队官方反馈如下:

1. 文章所述问题为今年七八月份头条搜索出现的爬虫问题,头条搜索在当时已经联系相关站长,一起分析原因并对系统进行了迭代改进,并且对抓取压力做了更有效的控制,后期反馈显示已经有效改善;

2. 头条搜索一直在关注站长朋友们反馈的问题建议,我们会持续关注反馈并继续改进头条搜索服务;

3. 欢迎大家通过官方邮箱向我们反馈问题及建议:bytespider@bytedance.com。



编号795,输入编号直达本文

●输入m获取文章目录

推荐↓↓↓

黑客技术与网络安全

更多推荐25个技术类微信公众号

涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。

    公众号
    关注公众号订阅更多技术干货!