上一篇文章講了如何對采集的資料進行抓包和決議,本次主要講解如何使用自動化工具,實作自動化資料采集,如果想了解抓包和決議部分的內容,可以查閱我的上一篇文章《資料平臺初試(技術篇)——抖音資料采集(初級版)》,文末附有上篇文章的傳送門,本次用到的工具:移動端自動化工具Appium,夜神模擬器(也可以用真機代替),adb工具,
運行環境準備作業
開始進入資料采集的準備作業,在上一篇文章的基礎上,搭建自動化環境,首先需要配置android-sdk,安裝教程可參考如下鏈接,最后需要驗證adb命令是否可用,在命令列視窗運行adb version,出現版本號資訊,說明adb工具可用,android sdk下載及安裝教程請參閱如下鏈接:
https://www.cnblogs.com/woniu123/p/10755262.html
配置好android-sdk后,就可以安裝Appium了,下載地址如下,此處我們選擇appium-desktop-setup-1.9.0.exe版本:
https://github.com/appium/appium-desktop/releases/download/v1.9.0/appium-desktop-setup-1.9.0.exe
下載好后基本是下一步安裝,安裝完成后啟動應用,出現如下視窗證明安裝成功:
點擊 “Start Server V 1.9.0”啟動服務,出現如下頁面則證明啟動成功,埠為4723:
打開之前配置好的模擬器,此時在命令列視窗運行adb devices,會出現連接的模擬器設備,證明運行環境準備完成
接下來是運行環境配置,點擊appium的 Start Inspector Session
需要配置如下啟動引數:
{
"platformName": "Android",
"platformVersion": "5.1.1",
"deviceName": "127.0.0.1:62001",
"appPackage": "com.ss.android.ugc.aweme",
"appActivity": "com.ss.android.ugc.aweme.main.MainActivity",
"noReset": true
}
platformName:模擬器運行的平臺,填入Android
platformVersion:查看模擬器的安卓版本,填入即可
deviceName:此處為運行adb devices命令得到的設備,當前模擬器為127.0.0.1:62001
appPackage和appActivity:抖音app的包名和啟動方法名,可通過android-sdk\build-tools\29.0.2下面的aapt.exe工具獲得
配置好后,點擊Star Session,看到模擬器啟動抖音app則證明環境配置無誤,
業務場景說明
有了運行環境,接下來介紹下本次的需求,打開模擬器中安裝的抖音app,首先下滑重繪視頻,再進入用戶主頁,分別對主頁資料,關注資料,粉絲資料,作品和喜歡頁簽進行采集,appium需要做的對應操作如下:
1.下滑重繪視頻
2.左滑進入用戶主頁
3.點擊關注按鈕
4.開始下滑關注串列,直到出現“暫時沒有更多了”
5.回傳用戶主頁
6.點擊粉絲按鈕
7.開始下滑粉絲串列,直到出現“暫時沒有更多了”
8.回傳用戶主頁
9.點擊作品頁簽
10.下滑作品視頻串列,直到出現“暫時沒有更多了”
11.點擊喜歡頁簽
12.下滑喜歡視頻串列,直到出現“暫時沒有更多了”
13.回傳視頻頁面,重復步驟1
代碼準備
安裝python的Appium客戶端:
pip install Appium-Python-Client
準備擼代碼,
1.啟動app
device_name = '127.0.0.1:62001'
device_port = '4723'
desired_caps = {
"platformName": "Android",
"platformVersion": "5.1.1",
"deviceName": device_name,
"appPackage": "com.ss.android.ugc.aweme",
"appActivity": "com.ss.android.ugc.aweme.main.MainActivity",
"noReset": True,
"unicodeKeyboard": True,
"resetKeyboard": True
}
device_driver = webdriver.Remote('http://127.0.0.1:' + str(device_port) + '/wd/hub', desired_caps)
等待啟動好了app之后,我們開始處理業務1,下滑重繪視頻,此處呼叫自己封裝的滑動方法:
swipe_page(device_driver, 0.5, 0.25, 0.5, 0.75)
def swipe_page(driver, x1, y1, x2, y2):
screen = AppiumOprationPage.get_size(driver)
screen_x1 = int(screen[0] * x1)
screen_y1 = int(screen[1] * y1)
screen_x2 = int(screen[0] * x2)
screen_y2 = int(screen[1] * y2)
driver.swipe(screen_x1, screen_y1, screen_x2, screen_y2)
等待視頻重繪出來后執行業務2,快速左滑進入用戶主頁:
flick_page(device_driver, 0.8, 0.5, 0.2, 0.5)
此處flick方法和swipe方法內部是一樣的,appium提供了兩個滑動方法,swipe為普通滑動,通過給定坐標進行滑動,flick為快速滑動,通過給定坐標滑動之后開始做均減速滑動直到停止,滑動速度較快,
進入用戶主頁之后,我們需要判斷按鈕的id,標簽位置等引數來進行點擊,接下來主要介紹如何獲取【關注】的標簽位置:
使用appium啟動app后,手動滑動進入用戶主頁,此時重繪appium頁面中間的重繪按鈕,點擊左邊的【關注】,此時可以看到中間列出的xml結構,以及右側的按鈕基本資訊,通過這些資訊,可以得到一個關注按鈕的Xpath:
//android.widget.TextView[@text='關注']

再對這個按鈕進行點擊即可進入關注頁面,開始回圈下滑到底即可:
driver.find_element_by_xpath("//android.widget.TextView[@text='關注']").click()
flick_page(device_driver, 0.5, 0.75, 0.5, 0.25)
完成下滑后,需要用同樣的方法獲取到回傳上一層按鈕的xpath:
//android.widget.ImageView[@resource-id='com.ss.android.ugc.aweme:id/nj']
然后點擊回傳上一層回到用戶主頁:
driver.find_element_by_xpath("//android.widget.ImageView[@resource-id='com.ss.android.ugc.aweme:id/nj']").click()

tips:
1.獲取xpath不要使用絕對路徑,經過大量測驗,絕對路徑在不同環境下是不一樣的,使用相對路徑則比較穩定
2.可以使用一些頁面文字元素,id進行相對定位,再取到最終需要的元素
3.不要使用resource-id進行定位,經過大量測驗,這個id不是唯一的,只能定位到第一個
4.也可以使用android-sdk\tools下面的uiautomatorviewer工具進行xpath定位,不過需要升級uiautomatorviewer,經過大量測驗,對于抖音app的一些高版本,uiautomatorviewer無法獲取其xpath,
通過同樣的方法,分別點擊【關注】【粉絲】【作品】【喜歡】,即可進行一個完整的操作,在使用上一次講到的mitmproxy進行代理,將所有的資料進行決議入庫,便可將所有的資料采集到自己的資料庫中,或者將視頻下載到本地硬碟,
進階
以上方法,經過大量的測驗,每天采集的資料非常有限,問題如下:
1.一臺模擬器,滑動速度有限
2.資料決議效率不高
針對以上兩點問題,后來又加入了新方案,支持了模擬器的橫向擴展(需要電腦硬體條件達標),以及資料的分布式決議,批量入庫,
新方案完成后,兩天的測驗,使用了兩臺模擬器滑動采集,第一天10小時,采集了53萬資料,而第二天,做了性能測驗,10小時資料量竟然達到了111.6萬,在測驗程序中,感覺資料決議一直沒有達到飽和,預測可以拖4臺模擬器,只是我的電腦硬體配置沒那么高,跑不了4臺模擬器,所以就沒有進行極限測驗,
如下為兩臺模擬器滑動程序截圖,以及每天采集資料量的一個統計圖:

更多抖音,快手,小紅書資料實時采集介面,請查看檔案: TiToData
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/235395.html
標籤:其他
上一篇:抖音資料采集教程,初級版
