1. 程式人生 > >抖音的資料抓取與資料背後的淘寶

抖音的資料抓取與資料背後的淘寶

分析的背景

 截至今年7月,抖音日活已突破3.2億。抖音總裁張楠預測,到2020年,國內短視訊行業的總日活使用者數,將達到10億。抖音推出多元變現方式,要讓1000萬創作者賺到錢 ,抖音說要讓這1000萬創作者賺到錢,其中變現的方式有很多種,我今天主要是想分享抖音背後的淘寶產業鏈,我們刷抖音視訊的過程中,我們會發現有些視訊是在推廣淘寶的商品,這個就是創作者變現的渠道之一,從淘寶店鋪角度來說,抖音達人幫其推廣商品,需要付給達人一定的廣告費用;從淘寶角度來說,淘寶有一個叫淘寶聯盟的平臺,每一個幫淘寶推銷商品的人,淘寶聯盟將其定義為淘寶客,只要淘寶客推廣的商品有人購買,那麼淘寶聯盟會支付給淘寶客一定比例的佣金。簡而言之,抖音達人有兩部分收入:淘寶商家的廣告費+淘寶聯盟的佣金(交易成功的前提下)。本文主要分析抖音達人發帖到淘寶之間的過程。

 

抖音的帖子

 

 

 

 

帖子的正文

 

我們可以看到左下角有一個購物車的標示。沒錯,他就是淘寶商品的連結,點選開啟如下

 

 

 

 

這個就是達人帖子推廣的商品,點選即可跳到淘寶APP

綜上所述,我們可以抓取某個達人的列表資料來分析背後的商品資料,從而可以得到對應的淘寶店鋪的資料。

 

抖音APP抓包

 

本次使用的iphone 的抖音version8.0.0的版本,anyproxy作為代理的抓包工具

anyproxy是阿里巴巴開發的一個優秀的代理的輪子,當然啦,國外還有一個mitmproxy

anyproxy 的安裝教程可以參考:

https://link.zhihu.com/?target=https%3A//www.jianshu.com/p/d978d3b8f2aa

anyproxy 的官方連結: 貌似需要穩定的國際網路環境才可以訪問

https://link.zhihu.com/?target=http%3A//anyproxy.io

anyproxy 的專案地址:

https://link.zhihu.com/?target=https%3A//github.com/alibaba/anyproxy

 

我們可以使用anyproxy和mitmproxy來作為抓包的分析工具,

anyproxy 是基於nodeJs開發的 (推薦熟悉nodeJs的人使用)

mitmproxy 是基於python開發的 (推薦熟悉python的人使用)

使用這個兩個工具主要是可以做資料的攔截與轉發,這兩者的都是利用到來中間人的攻擊的原理,後面的我們爬蟲開發也是利用這個原理。當然了單純的做資料分析,可以使用fidder和charles等常見的抓包工具。

安裝好anyproxy 需要手機設定信任證書以及代理

代理的設定,anyproxy 預設使用8001埠作為代理的埠

 

 

 設定代理

 

 

 

 

 設定信任證書

 

 

手機開啟抖音APP其中的一個達人帖子的列表

 

 

 

 某個達人的帖子列表頁面

 

電腦開啟:http://localhost:8002/ 可以看到流經手機所有的資料,其中當然也包含了抖音APP的資料.  可以看見抖音達人的帖子連結

做一下URL的條件過濾:https://api-hl.amemv.com/aweme/v1/aweme/post/

 

 

 

 

通過這個分析可以看到每一篇帖子都有simple_promotions的欄位,這個欄位就是攜帶推廣商品的資訊,我們可以先把這個ID存到資料,再根據商品的ID來獲取到淘寶店鋪的其他資訊

 

 

 

 

 

anyproxy預設的代理攔截與轉發的設定

 

 

 

這裡說明一下,預設在終端執行anyproxy -i ,anyproxy 會自動載入在/usr/local/lib/node_modules/anyproxy/lib/rule_default.js的檔案,我們需要攔截抖音的資料,我們需要在其同級的目錄新建一個douyin.js 檔案即可,執行anuproxy -i douyin.js,那麼anyproxy就根據douyin.js裡面的邏輯做攔截轉發的操作。這個mac的檔案的預設位置,window的預設檔案位置自己全域性搜尋一下rule_default.js即可以找到

具體的檔案douyin.js程式碼如下

 

  1 'use strict';
  2 
  3 module.exports = {
  4 
  5   summary: 'the default rule for AnyProxy',
  6 
  7   /**
  8    *
  9    *
 10    * @param {object} requestDetail
 11    * @param {string} requestDetail.protocol
 12    * @param {object} requestDetail.requestOptions
 13    * @param {object} requestDetail.requestData
 14    * @param {object} requestDetail.response
 15    * @param {number} requestDetail.response.statusCode
 16    * @param {object} requestDetail.response.header
 17    * @param {buffer} requestDetail.response.body
 18    * @returns
 19    */
 20   *beforeSendRequest(requestDetail) {
 21     console.log('this is request')
 22     return null;
 23   },
 24 
 25 
 26   /**
 27    *
 28    * 設定擷取抖音的資料 
 29    * @param {object} requestDetail
 30    * @param {object} responseDetail
 31    */
 32   *beforeSendResponse(requestDetail, responseDetail) {
 33       if (requestDetail.url.indexOf('https://api-hl.amemv.com/aweme/v1/aweme/post/') >= 0) {    //抖音達人的詳細資訊app端
 34           const newResponse = responseDetail.response;
 35           newResponse.body = newResponse.body.toString();          
 36           const posturl="/WebCrawler/douyin/AppUserData"
 37           HttpPost(newResponse.body,requestDetail.url,posturl)
 38           console.log('傳送app端達人的詳細資訊')
 39 
 40       }
 41         
 42     
 43 
 44     return null;
 45   },
 46 
 47 
 48   /**
 49    * default to return null
 50    * the user MUST return a boolean when they do implement the interface in rule
 51    *
 52    * @param {any} requestDetail
 53    * @returns
 54    */
 55   *beforeDealHttpsRequest(requestDetail) {
 56     return null;
 57   },
 58 
 59   /**
 60    *
 61    *
 62    * @param {any} requestDetail
 63    * @param {any} error
 64    * @returns
 65    */
 66   *onError(requestDetail, error) {
 67     return null;
 68   },
 69 
 70 
 71   /**
 72    *
 73    *
 74    * @param {any} requestDetail
 75    * @param {any} error
 76    * @returns
 77    */
 78   *onConnectError(requestDetail, error) {
 79     return null;
 80   },
 81 
 82 
 83   /**
 84    *
 85    *
 86    * @param {any} requestDetail
 87    * @param {any} error
 88    * @returns
 89    */
 90   *onClientSocketError(requestDetail, error) {
 91     return null;
 92   },
 93 };
 94 
 95 
 96 //傳輸資料到本地自己的伺服器進行入庫儲存的操作
 97 function HttpPost(json,url,path) {//將json傳送到伺服器,str為json內容,url為歷史訊息頁面地址,path是接收程式的路徑和檔名
 98     console.log("開始執行轉發操作");
 99     try{
100     var http = require('http');
101     var data = {
102         json: json,
103         url: encodeURIComponent(url),
104         data:'Im jiehuhu'
105     };
106     data = require('querystring').stringify(data);
107     var options = {
108         method: "POST",
109         host: "127.0.0.1",//注意沒有http://,這是伺服器的域名。
110         port: 8080,
111         path: path,//接收程式的路徑和檔名
112         headers: {
113             'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
114             "Content-Length": data.length
115         }
116     };
117     var req = http.request(options, function (res) {
118         res.setEncoding('utf8');
119         res.on('data', function (chunk) {
120             console.log('BODY: ' + chunk);
121         });
122     });
123     req.on('error', function (e) {
124         console.log('problem with request: ' + e.message);
125     });
126     
127     req.write(data);
128     req.end();
129     }catch(e){
130         console.log("錯誤資訊:"+e);
131     }
132     
133     console.log("轉發操作結束"+req);
134 }

 

 

 

具體的後端有一個專案來接收anyproxy 攔截轉發的資料,我這的使用的javaWeb專案名字叫做WebCrawler專案來處理請求

大體的抖音APP資料的採集流程圖如下:

 

 

這裡採用的是 java+tomcat8+mysql的技術框架,這是我一年前的技術棧 ,當然現在的我更加喜歡用mongoDB和Python,處理起來的時間比較快

也可以使用python + mongoDb 來處理anyproxy 傳送過來的資料

 

 

具體的自動化的操作部分暫時沒有完成,可以使用手機自動化測試工具Appium或者按鍵精靈

資料結果如下:抖音的部分資料

 

 

 

 

 

根據商品的ID獲取到淘寶店鋪的資料

 

 

 

 

 

根據淘寶商品的ID來獲取淘寶店鋪的資訊也是需要開發一個新的爬蟲。這裡不作過多說明,難度還是有一點,商品爬蟲關鍵需要搞懂淘寶的簽名機制

淘寶H5的簽名機制,感興趣自己慢慢研究。。。。反正我是研究出來了哈哈哈哈

 

具體的爬下來的資料我放在百度雲,連結如下:有興趣的可以看一下

 

連結:https://pan.baidu.com/s/1O5CYJeJYiL6uB7e56_WPUA 密碼:1abc

 

以上就是抖音資料的抓取過程,以及延伸至淘寶的過程,大致的思路

  • 抖音APP通過anyproxy來獲取抖音達人所有的帖子
  • 分析帖子裡面推廣的商品的ID,根據商品的ID來獲取店鋪相關的資訊
  • 分析一個達人到底在推廣哪些商品,和那一些店鋪在合作。
  • 通過大規模的資料抓取以分析,就可以分析出那些店鋪在抖音做大規模的推廣

關於呼呼:會點爬蟲,會點後端,會點前端,會點資料分析,會點演算法,一個喜歡陳奕迅的