M3U8流视频数据爬虫详解四:TS视频文件保护

视频网站的数据爬取和反爬永远都是一对矛盾的关系。然而从难易程度上来讲,相对于数据爬取,数据反爬要容易的多。因为数据爬取的技术进步都是被动的。对于一个没有做任何数据防护的数据源来说,写一个简单的数据爬取脚本就可以轻而易举的拿到数据。然而,当目标站点实施一个简单的反爬取策略,例如加一个session检查或者cookie检查,当前的爬虫脚本就立刻失效了。查原因就需要花时间分析,花时间攻克等。因此,相对于实施一个反爬策略,要攻克一个反爬策略,至少要多花2倍以上的时间。接下来我们将讨论几种视频网站的反爬策略以及对应的爬取方案。

最基本的反爬策略:User-Agent检查

当我们使用HTTP访问数据时,在HTTP头文件(HTTP HEADER)中一般都会找到User-Agent这个字段。用来标识客户端的类型。例如:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0
Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1 Mobile/15E148 Safari/604.1
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763

以上4中User-Agent分别是时下比较流行的4大浏览器:Chrome,Firefox,Safari和Edge(微软Windows 10)。因此,通过检查User-Agent可以判断当前的访问是否是正常访问还是可以的爬虫脚本爬取行为。如果当前访问没有找到User-Agent,或者User-Agent非常可以,那么就可以报一个404错误,或者返回一个假数据用来迷惑对手。以下是几个比较可以的User-Agent:

python-requests/2.18.4
selenium
phantomjs

相关对策
这种反爬措施还是很好解决的,只需要在访问之前自定义User-Agent信息即可。

页面动态设置校验Cookie

这种方案通常是用来防护静态的爬虫脚本的。一般在页面上只有一段JS脚本内容,该脚本的工作就是校验一个Cooike值,如果该值不存在就设置一个新值,并刷新页面再次校验,或者直接显示错误页面或者假数据来迷惑对手。相关代码就不贴了,懂一点JS代码的朋友应该很容易实现。

相关对策
由于普通的爬虫脚本是没有办法执行JS代码的,而且这种Cookie校验值通常都是动态生成的,因此也无法在HTTP中预先设置。要处理这种反爬策略,我们可以使用Phantomjs或者Selenium等动态引擎实现。

用户登陆

这事大多数数据源使用的数据保护方案。简单,高效,易用。首先用户必须注册账号以后才能访问数据。因此,系统可以记录每个用户的访问次数,可以非常容易地把那些高频巨量访问的用户找出来,并采取账号停用等手段。当然这种方案也是一把双刃剑,因为需要用户登陆就牺牲了用户体验。

相关对策
要爬取需要注册登陆的数据,只能注册账号并在脚本中写好模拟登陆代码。并且在爬取数据时,要非常小心地控制爬取并发数和爬取总数。尽量使得爬取访问看起来自然。为了控制访问总量,也可以多注册几个账号同时进行爬取。

有时,如果写模拟登陆脚本太麻烦的花,可以先在目标数据源登陆以后,拷贝目标数据源的Cookie信息,然后把该信息设置到HTTP头部信息中解决。这种方法的优点就是不用花时间写模拟登陆脚本;缺点是Cookie是有过期时间的,如果过期了,要重新登陆,拷贝和粘贴。如果是长期爬取任务,需要人工介入的工作量也不小。在我们上一篇文章《M3U8流视频数据爬虫详解三:M3U8视频网络数据爬虫实现》中,我们使用这种方法绕开用户登陆问题。

验证码校验

为了提高用户体验又想要通过类似于用户登陆的方式来保护数据。这种方案比用户登陆好高级很多。首先,极大的提升了用户体检。其次,每次出现一个验证码,如果用户输入正确就记录一个新的Cookie,这样Cookie是动态变化的。通过手工拷贝和粘贴几乎是不可能的。其次,验证码每次都是动态变化的,写模拟脚本也非常麻烦。有其是现在开源的验证码项目非常多,上线一个验证码保护策略是分分钟的事情。但是要攻克验证码确实几天都不一定能搞定的。

相关对策
现在比较常用的验证码包括看图输入数字和字母,或者看图回答图中问题,或者通过拉滑块的方式。看图输入数字和字母可以使用机器学习的方式攻克。看图回答图中问题会相对难一些,比如先要通过机器学习的方式正确的提取图中的内容,然后通过观察问题的类别来预先编写答题逻辑。拉滑块验证码通常是通过对比滑块图片与目标图片的像素来计算拖动的距离。大家需要注意在模拟拖拽动作时也要自然,太快会被判定为爬虫程序的。

TS文件链接保护

这种反爬措施一般是针对保护文件下载这类服务的。通常的做法是该文件的访问链接是有一个时间有效性,或者访问次数限制的。过了有效时间该链接就不能访问,或者访问过一次以后,该链接就不能访问。这种反爬策略对保护M3U8视频文件和TS视频文件非常有效。因为M3U8文件在页面上加载的时候都是自动的,访问一次便失效,为分析和编写爬虫设置了不小的障碍。

相关对策
在分析对应页面时,我们要活用巧用浏览器自带的开发者工具,在对应访问位置设置断点,阻止页面自动加载文件URL,使该URL保持可用。具体操作可以参考《M3U8流视频数据爬虫详解三:M3U8视频网络数据爬虫实现》

加密AES密钥

该反爬策略只针对M3U8视频的保护。由于M3U8视频使用标准的AES对称加密算法进行加密。因此在解密TS视频文件过程中,需要提供AES密钥和对应的IV加密向量。很多视频网站为了保护自己的TS视频文件,在网络传输AES密钥的过程中,都对该密钥做了处理。比如阿里云大学的TS视频AES密钥做了位运算处理。牛客网的TS视频AES密钥在发送前被AES加密了一遍(加密密钥的密钥需要对应的视频文件信息才可以找到)。

相关对策
只要是有密钥传递,并且解密密钥实在客户端做的,那么就能够破解。主要是通过浏览器的开发者工具,找到对应的解密代码就可以解密。具体可以参考《M3U8流视频数据爬虫详解三:M3U8视频网络数据爬虫实现》

毒数据混淆视听

这个是最终的破罐子破摔策略,但是也是非常有效。就是在真实数据中加入假数据,脏数据,甚至是将来用于取证的具有一定特征的数据。由于数据爬取一般是自动爬取,并且高并发高频率,基本上是不可能发现和甄别毒数据的。因此,该策略也被广泛应用。

相关对策
相对于这类自残型的反爬策略,目前还没有什么很好的应对措施。

爬取和反爬策略一直在不断演进的,并且彼此互相激励,互相制约。如果大家还有更多想要讨论的内容,可以扫码联系老船长。

Captain QR Code

扫码联系船长

发表回复

您的电子邮箱地址不会被公开。