抖音無水印視頻爬蟲(一)——踩坑

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=1570612510000&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

先附上爬蟲結果:

關於爬蟲的實現代碼,已經寫好啦:

抖音無水印視頻爬蟲(二)——爬蟲的實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章