抖音无水印视频爬虫(一)
Hello,好久没写博客啦!
今天刷抖音,刷到了一个抖音up的视频正好能用于我之前发现的文字识别神器pytesseract。这位douyiner就是:
想要考雅思或者有兴趣的同学可以去关注下hhh。
可以看到这位douyiner上传的视频都是配有英文字幕的,所以在把视频爬下来后可以进行抽帧然后在进行文字识别,然后再将识别出来的文字进行处理。大概的想法就是这样啦,今天摸索了一天总于可以将他的视频下载下来保存到本地啦。对今天所做的事进行一个总结吧。
一、踩坑
其实之前也想过爬抖音的视频,但总感觉还差点意思,抖音的视频爬虫已经一大堆了,甚至还有加了人脸识别打分的抖音小姐姐视频爬虫。我再做类似的感觉没啥意思。由于是移动端软件的爬虫,一开始想用Charles代理然后爬。好不容易配置好Charles,打开抖音竟然报没有网络连接(用浏览器是可以正常上网冲浪的),这时就意识到了抖音技术可定也意识到了这种方法。(原谅我废话多,我比较无聊)第一时间想的是换一个抓包软件例如Fiddler,上网查发现Fiddler也不可以。Ok,这时候以为本次计划要失败了,突然想到抖音视频是可以以链接分享的。然后就试着用PC的Chrome打开分享链接,竟然可以打开,然后我又在想既然视频可以通过链接分享,这个douyiner是不是也可以嘞?然后试了一下发现还真可以!!上图的内容就是在PC端的Chrome打开的。
然后一切就要以这位douyiner的分享链接:http://v.douyin.com/xE6BD3/开始,然后发现这个页面竟然可以动态加载!就去找了XHR文件(什么是XHR请自行百度哦)!然后还真有!
点开查看这个XHR:
这个XHR简直就是宝藏有没有!我想要的内容全都有了!
然后就是怎么得到这个XHR了,先看一个XHR的连接:
https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid=MS4wLjABAAAAFxmRPZ2PiNQrL_6xOPbzh_p3Hb8cjxnsXV_VlRNgPtw&count=21&max_cursor=0&aid=1128&_signature=pavqOhAe-HeGzMG4e9aPeKWr6i&dytk=14edbb07c587ab6074ae0886a1f1b79a
对比第二个XHR链接:
https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid=MS4wLjABAAAA54Hva6JnJrFzF1913RG4ie0agH41NPhVxKphJaQu5D0&count=21&max_cursor=0&aid=1128&_signature=pavqOhAe-HeGzMG4e9aPeKWr6i&dytk=1f056edbde30fe68a7ffb8f4e306eb92
发现只有max_cursor这个字段有差别,刚好XHR文件中有max_cursor,和has_more字段。
一开始是想着能不能伪造一个相似的链接改变一下max_cursor,发现不可以,原来是链接中的这_signature字段,然后想找生成这个_signature的js代码看看能不能写出类似的Python代码,js是找到了发现不可以(好像生成_signature的这个函数是从服务器返回的)。然后到这里这个项目又卡住啦,然后又想通过selenium直接保存这个XHR不过selenium的get_log()好像不可以。又查了一下,发现了selenium加browsermobproxy可以!感谢这篇博客:Selenium, Browsermob-Proxy 抓取浏览器network console的HAR
还有一个坑就是分享链接是短链接 ,直接用requests会报502。至此逻辑踩坑完毕。
整理大致过程就是:
selenium加browsermobproxy得到第一个max_cursor=0的XHR——>根据XHR里的has_more和max_cursor字段拼凑新的XHR的URL,反复如此直到has_more为false-——>获得所有XHR的内容从中抽取出视频名字和视频链接——>下载视频到本地。
大致过程就是这样啦,为了避免博客篇幅过长我把这次博客分成好几篇,想要看完整的就关注我把!hhh
其实在写这篇博客时代码还在跑,可能还会有什么bug就先不发代码了。
先附上爬虫结果: