抖音爬虫(基于自动化测试)
这是一篇比较粗糙的博客,大都是一些想法和整体解决方案的东西,适合于有基础的人看。
由于抖音这类的短视频网站被整改,抖音关闭了分享视频的网页接口。现在无法从网页端爬取短视频。
解决方法:手机模拟器 + 中间抓包工具 + 自动化控制脚本 + 下载脚本
相关依赖:
手机模拟器:?Genymotion(这是火箭速度的模拟器,千万别用AndroidStd自带的,慢的怀疑人生)
抓包工具 :mitmproxy (Windows下使用mitmdump 命令)
自动化控制服务器: Appium Desktop
1. 环境的安装和配置
在整体的工作中,由于本次相关依赖较多,所以环境的安装和配置,是非常重要的一环。
这里我列一下相关参考的博文,大家可以根据指导来配置相关的环境
模拟器的配置:https://www.cnblogs.com/whycxb/p/6850454.html
抓包工具的配置:直接用Python3的pip install mitmproxy即可 相关手机配置去搜一下,设置手机WIFI代理即可(和电脑在同一个局域网内)。
Appium配置:https://www.cnblogs.com/fnng/p/4540731.html。
至此,相关的环境和依赖都已经安装和配置完成。
2. Genymotion服务器上,app安装
这个模拟器之所以火,就是因为他有一个Translation的压缩包,支持ARM?ArchitectureCPU编译的apk在X86 的编译架构环境下安装。所以Geny可以安装类似抖音或者微信这样的app
创建一个api22的模拟器(我试了一个api26的,抖音起不来,不知道为什么)
把Trans.zip拖进去模拟器。完成之后重启模拟器
把抖音的apk拖进去,安装完成后会自动启动(我这里用的抖音版本是2.0.0,如果你想用其他版本,代码需要更改find_element_by_id()里面的Id。因为不同版本中,相同控件的Id编号不一样。)
3. 自动化测试脚本的开发
这里用python脚本,通过控制appium服务器来操作genymotion模拟器。
这里都是很简单的命令,不懂的可以百度一下。
整体的思想就是说,从推荐页向下挨个滑动,每到一个新视频,就点击进入用户主页,然后点击用户的视频,向下滑动n次,在滑动视频的时候,mitmproxy就会抓到视频的地址,后面的下载脚本就会完成相关的下载工作。之后再点击两次返回键,回到推荐页,继续上面的操作。理论情况下,可以无限爬取用户的视频内容。
4. 下载脚本的开发
这里下载脚本很简单,就是通过mitmproxy 的flow获得url,然后在所有的url中做过滤,拿到想要的url,进行下载。
这里面写了一点点逻辑,就是判断什么时候进入主页,这时候创建下载路径;之后如果是视频地址,就下载在当前下载路径之下。
还有就是用redis做了一步用户id去重,避免爬到重复用户。
总结:在工作中,本来是需要把以上在windows下开发的一套流程放在服务器上面实现一遍,因为最终要把任务放在服务器上来做,不过由于这个模拟器需要VT依赖,在服务器端无法完成。
所以退一步的方法就是,买一台很厉害的工作站,在公司本地挂10多个模拟器,同时跑吧。
一台模拟器一天如果顺利的话,会爬到500个用户左右(每个用户20个视频)。产生50G数据。
源码和脚本
如果大家喜欢这篇文章的话,希望大家能够收藏,转发 谢谢!更多相关资讯可以关注西安华美校区,免费获得java零基础教程!额外附送excel教程!
