這段時間一直在處理數據採集的問題,目前平臺數據採集趨於穩定,能夠抽出時間來整理一下近期的成果,順便介紹一些近期用到的技術。本篇文章偏向技術,須要讀者有必定的技術基礎,主要介紹數據採集過程當中用到的神器mitmproxy,以及平臺的一些技術設計。如下是數據採集總體的設計,左邊是客戶機,在裏面放置了不一樣的採集器,採集器發起請求以後,經過mitmproxy訪問抖音,等數據回傳以後,經過中間的解析器對數據進行解析,最後分門別類的存儲到數據庫中,爲了提高性能,在中間加入了緩存,把採集器和解析器分隔開,兩個模塊之間工做互不影響,能夠最大限度的把數據入庫,下圖爲第一代架構設計,後續會有一篇文章介紹平臺架構設計的三代演化史。python
開始進入數據採集的準備工做,第一步天然是環境搭建,本次咱們在windows環境下,採用python3.6.6環境,抓包和代理工具是mitmproxy,也可使用Fiddler抓包,採用夜神模擬器來模擬安卓運行環境(也能夠用真機),此次主要經過手動滑動app來抓取數據,下次介紹採用Appium自動化工具,實現數據採集的全自動(解放雙手)。
一、安裝python3.6.6環境,安裝過程可自行百度,須要注意的是,centos7自帶的是python2.7,須要升級到python3.6.6環境,升級以前主要先安裝ssl模塊,不然升級好的版本沒法訪問https的請求。
二、安裝mitmproxy,安裝好python環境後,在命令行執行pip install mitmproxy安裝mitmproxy,注:windows下只有mitmdump和mitmweb可使用,安裝好後在命令行輸入mitmdump便可啓動,默認啓動的代理端口爲8080。
三、安裝夜神模擬器,能夠在官網下載安裝包,安裝教程自行百度便可,基本都是下一步。安裝好夜神模擬器以後,須要對夜神模擬器進行配置。首先須要設置模擬器的網絡爲手動代理,IP地址爲windows的IP,端口爲mitmproxy的代理端口。
四、接下來是證書的安裝,打開模擬器中的瀏覽器,輸入地址mitm.it,選擇對應版本的證書,安裝好後,就能夠進行抓包了。
五、安裝app,app安裝包能夠到官網下載,而後經過拖拽進模擬器就能夠安裝,或者在應用市場進行安裝。
至此,本次數據採集環境就所有搭建完成。web
搭建好環境以後就開始對抖音app進行數據抓包,分析出每一個功能所使用的接口,本次以採集視頻數據接口爲例介紹。
關閉以前打開的mitmdump,從新打開mitmweb工具,mitmweb是一個圖形化的版本,就不用對着黑框框找了,以下圖:
啓動以後打開模擬器的抖音app,能夠看到已經有數據包解析出來了,而後進入用戶主頁,開始下滑視頻,在數據包列表中能夠找到請求視頻數據的接口https://aweme.snssdk.com/aweme/v1/aweme/post/
能夠在右邊看到接口的請求數據和響應數據,咱們將響應數據複製出來,進入下一步解析。數據庫
經過mitmproxy和python代碼的結合,咱們就能夠在代碼中獲取到mitmproxy中的數據包,進而能夠按照需求來處理。新建一個test.py文件,裏面放兩個方法:json
def request(flow): pass def response(flow): pass
見名知意,這兩個方法,一個是在請求的時候執行的,一個是在響應的時候執行,而數據包則存在於flow當中。經過flow.request.url能夠獲取到請求url,flow.request.headers能夠獲取到請求頭信息,flow.response.text中的就是響應的數據了。windows
def response(flow): if str(flow.request.url).startswith("https://aweme.snssdk.com/aweme/v1/aweme/post/"): index_response_dict = json.loads(flow.response.text) aweme_list = index_response_dict.get('aweme_list') if aweme_list: for aweme in aweme_list: print(aweme)
這個aweme就是一個完整的視頻數據了,能夠根據須要提取裏面的信息,這裏提取部分信息作介紹。centos
"statistics":{ "aweme_id":"6765058962225204493", "comment_count":24, "digg_count":1465, "download_count":1, "play_count":0, "share_count":3, "forward_count":0, "lose_count":0, "lose_comment_count":0 }
statistics信息就是這個視頻的點贊,評論,下載,轉發的數據。
share_url爲視頻的分享地址,經過這個地址,能夠在PC端觀看抖音分享的視頻,也能夠經過這個連接解析到無水印視頻。
play_addr爲視頻的播放信息,其中的url_list即爲無水印地址,不過目前官方作了處理,這個地址沒法直接播放,也有時間限制,超時以後連接就失效了。
有了這個aweme,就能夠把裏面的信息解析出來,保存到本身的數據庫,或者下載無水印視頻,保存到本身電腦了。
寫好代碼以後,保存test.py文件,cmd進入命令行,進入到保存test.py文件目錄下,在命令行輸入mitmdump -s test.py,mitmdump就啓動了,此時打開app,開始滑動模擬器,進入用戶主頁:
開始不斷下滑,test.py文件就能夠把抓取到的視頻數據所有解析出來了,如下是我截取的部分數據信息:
視頻信息:
視頻統計數據:
視頻評論數據:
無水印視頻下載:
本次介紹就到這裏結束了,主要是運用mitmdump配合python代碼來解析數據,下次講講怎麼運用appium,怎麼實現自動化滑動模擬器,實現這個程序的全自動抓取視頻數據,以及把採集下來的數據進行處理以後,獲得的一些成果展現。
瀏覽器
更多抖音,快手,小紅書數據實時採集接口,請查看文檔: TiToData緩存