python爬蟲24 | 搞事情了,用 Appium 爬取你的微信朋友圈。


昨天小帥b看到一些事情不順眼

 

有人偷換概念

 

忍不住就寫了一篇反諷 996 的

 

看不下去了,我支持996,年輕人就該996!

 

沒想到有些人看不懂

 

這就算了

 

還來罵我

 

早些時候關注我的小伙伴應該知道我第一時間就發過反對 996 的文章

 

去他媽的996!

python之父就是牛逼

 

哎~

 

不過也好

 

洗掉一些無腦粉絲

 

“你個假粉絲,小帥b不是蔡徐坤”

 

 

好了

 

進入正題

 

上次

 

小帥b跟你說了如何安裝 Appium 的相關環境

 

以及讓它自動打開了手機上的微信App

 

python爬蟲23 | 手機,這次要讓你上來自己動了。這就是 Appium+Python 的牛x之處

 

相信你已經躍躍欲試

 

想要來爬取一些手機上的 APP 數據了

 

那么這次

 

小帥b就帶你爬取微信朋友圈的數據

 

接下來就是

 

學習 python 的正確姿勢

 

 

友情提醒

本篇需要你先安裝好 Appium 相關環境才可以喲,如果你還沒安裝的話快點出門左轉,安裝完之后再來這里玩耍。

 

ok

 

首先我們要知道微信這個 apk 的包名和啟動頁的 Activity

 

將你的 Android 雞連接到電腦

 

在終端輸入 adb devices 確保你已經將你的雞連接到電腦

 

 

如果像上面這樣出現設備名稱就說明你連接上你的電腦了

 

如果你插進電腦之后還沒發現有任何設備名稱顯示

 

那就記得打開 USB 調試,多拔插幾次,總會連上的,這是過來人經驗

 

接着

 

在你的手機里面打開微信

 

然后打開你的終端輸入

 

adb shell

 

然后輸入

 

dumpsys activity | grep mFocusedActivity

 

 

 

這時候我們就獲取到微信的包名和啟動頁面的名稱了

 

我們還要知道我們的手機是什么版本的

 

輸入以下命令獲取

 

adb shell getprop ro.build.version.release

 

那么現在我們就知道了這些必要的信息了

 

   desired_caps = {}   desired_caps['platformName'] = 'Android'   desired_caps['platformVersion'] = '5.1'   desired_caps['deviceName'] = '88CKBM622PAM'   desired_caps['appPackage'] = 'com.tencent.mm'   desired_caps['appActivity'] = '.ui.LauncherUI'

 

 

接下來

 

主要思路就是

 

自動開啟微信

模擬登錄微信

找到小帥b的朋友圈

把朋友圈的數據抓下來

 

想要模擬登錄

 

我們就需要獲取到微信的登錄按鈕這個元素

 

如何獲取呢?

 

在你安裝好的 sdkmanager 的 tool 目錄下

 

有一個叫做 uiautomatorviewer 的工具

 

windows用戶直接雙擊打開

 

ubuntu的話可以進入相應的目錄

用命令 ./uiautomatorviewer 行打開

 

~/android/tools/bin$ ./uiautomatorviewer 

 

打開之后是這個鳥樣

 

 

我們點擊菜單欄的第二個圖標按鈕

 

 

這時候你就會發現

 

手機的屏幕被抓過來了

 

用鼠標點一下登錄按鈕你會看到

 

相應的資源信息都被定位到了

 

 

那么要讓它自動點擊登錄按鈕就簡單了

 

# 獲取到登錄按鈕后點擊 login_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/e4g"))) login_btn.click()

 

點擊登錄之后頁面是這樣的

 

 

我們要切換到用郵箱登錄

 

還是老樣子

 

我們獲取到按鈕,然后讓它點擊

 

 # 獲取使用微信號登錄按鈕  change_login_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/cou")))  change_login_btn.click()

 

那么接下來就輸入賬號密碼了

 

 

 

獲取到賬號和密碼的 EditText 和 登錄按鈕

 

然后自動輸入賬號密碼

 

最后點一下登錄

 

 # 獲取輸入賬號元素並輸入 account = self.wait.until(EC.presence_of_element_located((By.XPATH, '//*[@resource-id="com.tencent.mm:id/cos"]/android.widget.EditText'))) account.send_keys("你的微信賬號") # 獲取密碼元素並輸入 password = self.wait.until(EC.presence_of_element_located((By.XPATH, '//*[@resource-id="com.tencent.mm:id/cot"]/android.widget.EditText'))) password.send_keys("你的微信密碼") # 登錄 login = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/cov"))) login.click()

 

登錄之后會彈出一個界面

 

你願意把你的通訊錄授權給我嗎?

 

呵呵

 

no!

 

 

# 點擊去掉通訊錄提示框no_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/az9")))no_btn.click()

 

這樣

 

我們就成功登入微信了

 

接下來找到小帥b的微信

 

 

需要點擊上方的搜索按鈕

 

 # 獲取到搜索按鈕后點擊 search_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/iq"))) search_btn.click()

 

這時候會出現輸入框

 

 

搜索小帥b本b

 

# 獲取搜索框並輸入search_input = self.wait.until(EC.presence_of_element_located((By.ID, "com.tencent.mm:id/kh")))search_input.send_keys("wistbean")

 

這時候會出現一個 item

 

 

沒錯

 

點擊頭像進去

 

# 點擊頭像進入 xiaoshuaib_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/py"))) xiaoshuaib_btn.click()

 

接下來幾步都是一個道理

 

主要是進入小帥b的朋友圈

 

# 點擊右上角...進入menu_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/jy")))menu_btn.click()# 再點擊頭像icon_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/e0c")))icon_btn.click()# 點擊朋友圈moment_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/d86")))moment_btn.click()

 

就這樣點進去

 

 

進入朋友圈之后

 

我們來分析一下

 

 

 

可以看到小帥b的朋友圈是這樣的

 

我們需要滑動獲取到更多內容

 

可以使用 Appium 的 swipe 方法

 

再來

 

我們需要循環獲取到數據

 

 

可以看到每條朋友圈都被封裝到 ListView 這個容器里面

 

所以我們要從這里面獲取所有數據

 

然后再進行遍歷

 

那么每一個具體的條目呢?

 

 

可以看到

 

數據被放在了 LinearLayout 的具體容器里面了

 

所以我們可以根據 id 獲取相應的內容

 

 # 獲取 FrameLayout items = self.wait.until(EC.presence_of_all_elements_located((By.ID, 'com.tencent.mm:id/eew'))) # 滑動 self.driver.swipe(self.start_x, self.start_y, self.end_x, self.end_y, 2000) #遍歷獲取 for item in items:     moment_text = item.find_element_by_id('com.tencent.mm:id/kt').text     day_text = item.find_element_by_id('com.tencent.mm:id/eke').text     month_text = item.find_element_by_id('com.tencent.mm:id/ekf').text     print('抓取到小帥b朋友圈數據: %s' % moment_text)     print('抓取到小帥b發布時間: %s月%s' % (month_text, day_text))

 

 

至此

 

我們的代碼寫完了

 

來運行一下吧

 

首先打開 Appium

 

[Appium] Welcome to Appium v1.12.1[Appium] Appium REST http interface listener started on 0.0.0.0:4723

 

接着運行爬取朋友圈的代碼

 

截取部分結果

 

微信啟動...登錄成功...搜索小帥b...進入朋友圈...抓取到小帥b朋友圈數據: 那天馬雲說:我從來沒碰過錢,我對錢沒興趣。
最近馬雲說:能 996 是一種福氣,我每天都 1212。
果然,有錢爸爸說話就是好聽。抓取到小帥b發布時間: 4月月12抓取到小帥b朋友圈數據: 有本事雙擊我頭像抓取到小帥b發布時間: 4月月10抓取到小帥b朋友圈數據: 剛點了外賣,小哥有點超時才送到。我倒不覺得有什么,可是小哥將餐物雙手遞給我后接下來的動作讓我驚訝到了:
他對我深深地鞠了一躬……😳抓取到小帥b發布時間: 4月月01抓取到小帥b朋友圈數據: 有人抱怨現在的互聯網產品太霸道,微信不能打開淘寶鏈接,頭條不能放微信二維碼,百度搜不到知乎高質量問題……
但其實出門看一下,好像也沒有哪家麥當勞可以直接開在肯德基里面賣全家桶的。抓取到小帥b發布時間: 3月月29抓取到小帥b朋友圈數據: 有人抱怨現在的互聯網產品太霸道,微信不能打開淘寶鏈接,頭條不能放微信二維碼,百度搜不到知乎高質量問題……
但其實出門看一下,好像也沒有哪家麥當勞可以直接開在肯德基里面賣全家桶的。抓取到小帥b發布時間: 3月月28抓取到小帥b朋友圈數據: 這兩天聽到最多的一句話就是:帥b老仙,法力無邊。
整的我差點以為自己有法力了……抓取到小帥b發布時間: 3月月25抓取到小帥b朋友圈數據: 誇誇群,寫幾個微信機器人放群里,搞點誇獎人的語句數據庫,根據用戶的話檢索一下,然后返回相應的誇獎語句。
嗯,然后把我自己放進群里,享受一頓誇,覺得不爽還可以繼續改那些誇我的話。抓取到小帥b發布時間: 3月月22抓取到小帥b朋友圈數據: 突然發現我好久好久沒有講潮汕話了...抓取到小帥b發布時間: 3月月20抓取到小帥b朋友圈數據: 誇誇群,寫幾個微信機器人放群里,搞點誇獎人的語句數據庫,根據用戶的話檢索一下,然后返回相應的誇獎語句。
嗯,然后把我自己放進群里,享受一頓誇,覺得不爽還可以繼續改那些誇我的話。抓取到小帥b發布時間: 3月月15抓取到小帥b朋友圈數據: 根據監管部門規定以及相關投訴
這條朋友圈無法觀看,但你可以點贊抓取到小帥b發布時間: 3月月10抓取到小帥b朋友圈數據: 之前想的是再好的產品也抵不過有強大 IP 支撐的破產品。
但現在想想,IP 也是產品的一部分。抓取到小帥b發布時間: 3月月05抓取到小帥b朋友圈數據: 之前想的是再好的產品也抵不過有強大 IP 支撐的破產品。
但現在想想,IP 也是產品的一部分。抓取到小帥b發布時間: 3月月04抓取到小帥b朋友圈數據: 9102了,還是有那么多 zf 的網站又丑又難用。抓取到小帥b發布時間: 3月月01...

 

 

ok

 

拿到數據還可以進一步存儲

 

小帥b就不說了

 

因為從下一篇開始

 

小帥b會說說爬取下來的數據存儲相關的

 

這一篇

 

主要讓你知道如何爬取 app 的數據

 

如果你想去抓包爬取朋友圈的數據

 

是很難的

 

微信做了限制

 

所以用 Appium 相對來說就簡單好多啦

 

本篇涉及到的源代碼一樣放在了公眾號

 

在后台發送 「朋友圈」獲取

 

下次見

 

peace

 

帥b老仙

法力無邊

 

 

 

相關文章

1、對於b站這樣的滑動驗證碼,不好意思,照樣自動識別

2、手機,這次要讓你上來自己動了。這就是 Appium+Python 的牛x之處

3、上來,自己動 !這就是 selenium 的牛逼之處

 

 

 

右下角

發功+1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM