抖音的數據抓取與數據背後的淘寶

分析的背景

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

 

抖音的帖子

 

 

 

 

帖子的正文前端

 

咱們能夠看到左下角有一個購物車的標示。沒錯,他就是淘寶商品的連接,點擊打開以下java

 

 

 

 

這個就是達人帖子推廣的商品,點擊便可跳到淘寶APPnode

綜上所述,咱們能夠抓取某個達人的列表數據來分析背後的商品數據,從而能夠獲得對應的淘寶店鋪的數據。python

 

抖音APP抓包

 

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

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

anyproxy 的安裝教程能夠參考:github

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

anyproxy 的官方連接: 貌似須要穩定的國際網絡環境才能夠訪問算法

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

anyproxy 的項目地址:sql

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來獲取店鋪相關的信息
  • 分析一個達人到底在推廣哪些商品,和那一些店鋪在合做。
  • 經過大規模的數據抓取以分析,就能夠分析出那些店鋪在抖音作大規模的推廣

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

here can contact me

 

 

 

本文爲做者原創,我一個一個字打出來的,嚶嚶,如需轉載請註明原文連接

本文的目的只有一個就是學習爬蟲技術,若是有人利用本文技術進行非法操做帶來的後果都是操做者本身承擔,和本文以及本文做者沒有任何關係。

 

原文出處:https://www.cnblogs.com/nn839155963/p/11557411.html

相關文章
相關標籤/搜索