昨天小帥b看到一些事情不順眼javascript
有人偷換概念php
忍不住就寫了一篇反諷 996 的css
沒想到有些人看不懂java
這就算了python
還來罵我android
早些時候關注個人小夥伴應該知道我第一時間就發過反對 996 的文章ios
去他媽的996!nginx
python之父就是牛逼web
哎~
不過也好
洗掉一些無腦假粉絲
「你個假粉絲,小帥b不是蔡徐坤」
好了
進入正題
上次
小帥b跟你說了如何安裝 Appium 的相關環境
以及讓它自動打開了手機上的微信App
python爬蟲23 | 手機,此次要讓你上來本身動了。這就是 Appium+Python 的牛x之處
相信你已經躍躍欲試
想要來爬取一些手機上的 APP 數據了
那麼此次
小帥b就帶你爬取微信朋友圈的數據
接下來就是
友情提醒
本篇須要你先安裝好 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老仙
法力無邊
相關文章
二、手機,此次要讓你上來本身動了。這就是 Appium+Python 的牛x之處
右下角
發功+1