Python自動化爬取App資料

歡迎點選右上角關注小編,除了分享技術文章之外還有很多福利,私信學習資料可以領取包括不限於Python實戰演練、PDF電子文件、面試集錦、學習資料等。

Python自動化爬取App資料

基本環境配置

版本:Python3

系統:Windows

需要安裝:

1。JDK - Download JDK,Appium要求使用者必須配置JAVA環境, 否則啟動Seesion報錯。

2。Appium - Download Appium, 安裝過程請自行搜尋。

3。Android SDK - Download SDK

4。 Selenium - 建議使用低版本的Python Selenium庫,在Chrome高版本可能會報錯。例如:

pip3 install selenium==2。48。0

5。 chromedriver。exe - Download Chromedriver, 確保版本要匹配, 然後將 。exe 程式放在“。。Python\Python36\Scripts”目錄下。

6。 pymongo

pip3 install pymongo

7。 MongoDB Server - Download MongoDB

爬取思路

爬取思路:

模擬登入

抓取動態

儲存資料

Android SDK的安裝與配置

開啟Android Studio, 選擇“Configure->SDK Manager->Apperance&Behavior->System Settings->Android SDK”, 選擇對應安卓機版本的SDK,如圖:

Python自動化爬取App資料

此外,還需要將SDK所在路徑新增到系統環境變數中,否則報錯。

Desired Capabilites 引數

分別是:platfornName, deviceName, appPackage, appActivity。前兩個可透過如下命令獲取, 前提是連線手機、開啟USB除錯:

adb devices -l

Python自動化爬取App資料

後兩個引數請移步:獲取appPackage和appActivity

開啟安卓的“ 開發者選項、USB除錯 ”

測試之前,確保開啟 開發者選項、USB除錯。開發者模式確保除錯程式在手機安裝輔助軟體:Unlock, Appium Settings;USB除錯主要是利用Appium內建驅動開啟APP。此外,要保持螢幕常亮。

5。 節點ID或XPATH值獲取

安卓微信節點獲取,相對比較容易獲取,比如獲取“登入”ID值,啟動Session後只需點選螢幕左側安卓屏的登入按鈕,中間就會自動定位到所在節點,最右側還會顯示該節點的所有屬性。如圖:

Python自動化爬取App資料

對於文字輸入框,只需要點選最右側的“send text”即可。

“是否匹配通訊錄”

這裡選擇“否”, 理由:重新登入進入微信後會自動載入本地資料,耗時較長,如果匹配通訊錄好友,增加耗時,可能在TIMEOUT時間內獲取不到節點,導致程式終止。我這裡選擇了“是”, 如圖:

Python自動化爬取App資料

朋友圈資訊獲取思路

獲取當前顯示的朋友圈每條狀態對應的區塊元素,遍歷每個區塊元素,再獲取內部顯示的使用者名稱、正文、釋出時間,程式碼如下:

# items儲存當前頁面所有釋出的朋友圈資訊items = self。wait。until( EC。presence_of_all_elements_located( # 每個ej9節點對應一條朋友圈資料 (By。XPATH, ‘//*[@resource-id=“com。tencent。mm:id/ej9”]/android。widget。LinearLayout’)))for item in items: try: # 暱稱 nickname = item。find_element_by_id(‘com。tencent。mm:id/b5o’)。get_attribute(‘text’) # 正文 content = item。find_element_by_id(‘com。tencent。mm:id/ejc’)。get_attribute(‘text’) # 日期 date = item。find_element_by_id(‘com。tencent。mm:id/eec’)。get_attribute(‘text’) # 處理日期 date = self。processor。date(date) data = { ‘nickname’: nickname, ‘content’: content, ‘date’: date, }

日期處理

日期處理的實現方式,程式碼如下:

class Processor(): def date(self, datetime): “”“ 格式化時間 :param date: 原始時間 :return: 處理後時間 ”“” if re。match(‘\d+分鐘前’, datetime): minute = re。match(‘(\d+)’, datetime)。group(1) datetime = time。strftime(‘%Y-%m-%d’, time。localtime(time。time() - float(minute) * 60)) if re。match(‘\d+小時前’, datetime): hour = re。match(‘(\d+)’, datetime)。group(1) datetime = time。strftime(‘%Y-%m-%d’, time。localtime(time。time() - float(hour) * 60 * 60)) if re。match(‘昨天’, datetime): datetime = time。strftime(‘%Y-%m-%d’, time。localtime(time。time() - 24 * 60 * 60)) if re。match(‘\d+天前’, datetime): day = re。match(‘(\d+)’, datetime)。group(1) datetime = time。strftime(‘%Y-%m-%d’, time。localtime((time。time()) - float(day) * 24 * 60 * 60)) return datetime

完整程式碼

Python自動化爬取App資料

注意事項:

程式碼中所有節點都須提前透過 Appium新建Session獲取(親測同版本的微信中vivo_x7和Mi_8節點相同,其餘機型未知)

建議使用高效能手機測試(MI_8|MI_9等)

執行結果

Python自動化爬取App資料