如何采集抖音的資料,視頻資料采集教程
抖音App和服務端互動使用的是HTTPS協議,使用Fiddler很容易可以捕獲到資料,如下圖所示,
不過想要自己模擬一個有效的請求可不是那么容易了,因為它使用了簽名機制,在所有請求中都有as和cp兩個簽名引數,除非得知簽名演算法否則我們無法構造出有效的請求,
這里我們使用模擬操作抖音App的方式,讓App幫我們發出有效的請求,然后我們攔截服務器的HTTP應答資料,再從中提取我們感興趣的資訊,
下面結合一個實際的案例介紹下整個程序,根據客戶的需求,要采集一些指定用戶加關后的系統推薦“你可能感興趣”的資料(如下圖所示)用于商品營銷,

點擊“查看更多”可以看到更多的系統推薦用戶串列資料,如下圖所示,
我們按如下步驟模擬操作App:
1.啟動抖音,
2.點擊搜索按鈕,
3.輸入搜索關鍵詞(抖音用戶ID),點擊搜索,
4.找到匹配的用戶,點擊關注,
5.點擊系統推薦“查看更多”,模擬多次向上滑動螢屏,直至資料加載完畢(螢屏出現“暫時沒有更多了”),
于此同時,我們使用抓包腳本(可以使用Fiddler的Customize Rules,也可以使用Mitmproxy),捕獲并過濾URL中含有/user/recommend/的HTTP應答資料,從JSON資料中提取系統推薦的用戶資訊(如下圖所示),
模擬操作抖音App的腳本核心代碼如下所示:
抖音App和服務端互動使用的是HTTPS協議,使用Fiddler很容易可以捕獲到資料,如下圖所示,
不過想要自己模擬一個有效的請求可不是那么容易了,因為它使用了簽名機制,在所有請求中都有as和cp兩個簽名引數,除非得知簽名演算法否則我們無法構造出有效的請求,
這里我們使用模擬操作抖音App的方式,讓App幫我們發出有效的請求,然后我們攔截服務器的HTTP應答資料,再從中提取我們感興趣的資訊,
下面結合一個實際的案例介紹下整個程序,根據客戶的需求,要采集一些指定用戶加關后的系統推薦“你可能感興趣”的資料(如下圖所示)用于商品營銷,
點擊“查看更多”可以看到更多的系統推薦用戶串列資料,如下圖所示,
我們按如下步驟模擬操作App:
1.啟動抖音,
2.點擊搜索按鈕,
3.輸入搜索關鍵詞(抖音用戶ID),點擊搜索,
4.找到匹配的用戶,點擊關注,
5.點擊系統推薦“查看更多”,模擬多次向上滑動螢屏,直至資料加載完畢(螢屏出現“暫時沒有更多了”),
于此同時,我們使用抓包腳本(可以使用Fiddler的Customize Rules,也可以使用Mitmproxy),捕獲并過濾URL中含有/user/recommend/的HTTP應答資料,從JSON資料中提取系統推薦的用戶資訊(如下圖所示),
模擬操作抖音App的腳本核心代碼如下所示:
view plaincopy to clipboardprint?
from com.dtmilano.android.viewclient import ViewClient
def search_douyin_for_recommend_user(douyin_id):
"""采集指定抖音賬號的關注推薦資料
"""
log(u'準備采集"{}"對應的關注推薦資料'.format(douyin_id))
# 連設備
serialno = None
if serialno:
os.system('adb connect {}'.format(serialno or ''))
time.sleep(3)
device, serialno = ViewClient.connectToDeviceOrExit(serialno=serialno)
vc = ViewClient(device, serialno, autodump=False)
# 強制關閉抖音
log(u'強制關閉抖音.')
device.shell('am force-stop com.ss.android.ugc.aweme')
time.sleep(2)
# 啟動抖音
log(u'啟動抖音.')
device.shell('am start -n com.ss.android.ugc.aweme/.main.MainActivity')
time.sleep(5)
# 暫停視頻播放
log(u'點擊螢屏,暫停視頻播放.')
device.touch(514, 1048)
# 點擊搜索按鈕
vc.dump()
search_btn = vc.findViewById('com.ss.android.ugc.aweme:id/amj')
if search_btn:
log(u'點擊搜索按鈕,跳轉到搜索頁面.')
search_btn.touch()
vc.dump()
# 點擊搜索輸入框
search_input = vc.findViewById('com.ss.android.ugc.aweme:id/ad_')
if search_input:
log(u'點擊搜索框,準備輸入關鍵詞.')
search_input.touch()
# 輸入抖音ID
log(u'輸入搜索關鍵詞: {}.'.format(douyin_id))
device.type(douyin_id.encode('UTF-8'))
# 點擊搜索按鈕
search_btn = vc.findViewById('com.ss.android.ugc.aweme:id/cp8')
if search_btn:
log(u'提交搜索.')
search_btn.touch()
time.sleep(2)
vc.dump()
## 切換到用戶
#user_tab = vc.findViewWithText(u'用戶')
#user_tab.touch()
# 找到匹配的
matches = []
def find_matches(view):
if view.getClass() == 'android.widget.TextView':
text = view.getText()
if douyin_id.lower() in text.lower():
# 找到匹配的了
log(u'找到匹配的: {}'.format(text))
matches.append(view)
else:
#print text
pass
vc.traverse(transform=lambda view: find_matches(view))
if matches:
# 有沒有已關注按鈕
btn = vc.findViewWithText(u'已關注')
if btn:
# 先取消關注
log(u'之前關注過,先取消關注.')
btn.touch()
time.sleep(1)
user_matched = matches[0]
log(u'點擊進入個人主頁.')
user_matched.touch()
time.sleep(1)
# 點關注
vc.dump()
follow_btn = vc.findViewById('com.ss.android.ugc.aweme:id/aei')
if follow_btn:
# 點擊關注
log(u'點擊關注')
follow_btn.touch()
time.sleep(1)
# 點擊查看更多
vc.dump()
viewmore_btn = vc.findViewById('com.ss.android.ugc.aweme:id/bqn')
if viewmore_btn:
# 點擊查看更多
log(u'點擊查看更多系統推薦')
viewmore_btn.touch()
time.sleep(1)
i = 0
while True:
# 上滑動
device.drag((345, 1762), (345, 550), duration=100)
log(u'上滑以加載更多')
i += 1
if i % 5 == 0:
# 拖動10次判斷一下是否還有更多
vc.dump()
if vc.findViewWithText(u'暫時沒有更多了'):
log(u'暫時沒有更多了, "{}"的關注推薦資料采集完畢.'.format(douyin_id))
# 采集成功了
return True
failed_tip = vc.findViewWithText(u'加載失敗,點擊重試')
if failed_tip:
log(u'加載失敗,點擊重試.')
failed_tip.touch()
else:
# 沒有找到查看更多按鈕
log(u'沒有找到查看更多按鈕')
else:
# 沒有找到加關注按鈕
log(u'沒有找到加關注按鈕')
else:
# 沒有找到匹配的用戶
log(u'沒有找到匹配的用戶')
else:
# 沒有找到搜索提交按鈕
log(u'沒有找到搜索提交按鈕.')
else:
# 沒有找到搜索輸入框
log(u'沒有找到搜索輸入框.')
else:
# 沒有找到搜索按鈕
log(u'沒有找到搜索按鈕.')
上述腳本的運行截圖如下所示:
最后附上抓取到的部分示例資料:
更多抖音,快手,小紅書資料實時采集介面,請查看檔案: TiToData
免責宣告:本檔案僅供學習與參考,請勿用于非法用途!否則一切后果自負,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/240828.html
標籤:大數據
上一篇:C語言這個前導零怎么略去
