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

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

 

有人偷換概念php

 

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

 

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

 

沒想到有些人看不懂java

 

這就算了python

 

還來罵我android

 

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

 

去他媽的996!nginx

python之父就是牛逼web

 

哎~

 

不過也好

 

洗掉一些無腦粉絲

 

「你個假粉絲,小帥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老仙

法力無邊

 

 

 

相關文章

一、對於b站這樣的滑動驗證碼,很差意思,照樣自動識別

二、手機,此次要讓你上來本身動了。這就是 Appium+Python 的牛x之處

三、上來,本身動 !這就是 selenium 的牛逼之處

 

 

 

右下角

發功+1

相關文章
相關標籤/搜索