用基于python的appium爬取b站直播消費(fèi)記錄
基于python的Appium進(jìn)行b站直播消費(fèi)記錄爬取
之前看文章說(shuō)fiddler也可以進(jìn)行爬取,但嘗試了一下沒成功,這次選擇appium進(jìn)行爬取。類似的,可以運(yùn)用爬取微信朋友圈和抖音等手機(jī)app相關(guān)數(shù)據(jù)
正文
#環(huán)境配置參考
前期工作準(zhǔn)備,需要安裝python、jdk、PyCharm、Appium-windows-x.x、Appium_Python_Client、Android SDK,pycharm可以用anaconda的jupyter來(lái)替代
具體可以參考這篇博客,講的算是很清楚啦
前期準(zhǔn)備工作配置需要不停的安裝和配置環(huán)境變量,也是個(gè)相對(duì)枯燥的過(guò)程
完成以后就可以真正爬取啦
導(dǎo)入模塊
from appium import webdriver import numpy as np import pandas as pd import time
通過(guò)程序打開手機(jī)b站app
desired_caps = {
'platformName': 'Android', # 被測(cè)手機(jī)是安卓
'platformVersion': '10', # 手機(jī)安卓版本
'deviceName': 'xxx', # 設(shè)備名,安卓手機(jī)可以隨意填寫
'appPackage': 'tv.danmaku.bili', # 啟動(dòng)APP Package名稱
'appActivity': '.ui.splash.SplashActivity', # 啟動(dòng)Activity名稱
'unicodeKeyboard': True, # 使用自帶輸入法,輸入中文時(shí)填True
'resetKeyboard': True, # 執(zhí)行完程序恢復(fù)原來(lái)輸入法
'noReset': True, # 不要重置App,如果為False的話,執(zhí)行完腳本后,app的數(shù)據(jù)會(huì)清空,比如你原本登錄了,執(zhí)行完腳本后就退出登錄了
'newCommandTimeout': 6000,
'automationName': 'UiAutomator2'
}
打開b站
# 連接Appium Server,初始化自動(dòng)化環(huán)境
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 設(shè)置等待時(shí)間,如果不給時(shí)間的話可能會(huì)找不到元素
driver.implicitly_wait(4)
打開之后呈現(xiàn)如下頁(yè)面

在手機(jī)上點(diǎn)擊我的——我的直播——消費(fèi)記錄,查看個(gè)人消費(fèi)記錄,
當(dāng)然也可以寫兩行代碼來(lái)實(shí)現(xiàn)這個(gè)過(guò)程(這里選擇跳過(guò)),如下圖所示

因?yàn)檫@個(gè)消費(fèi)記錄很多,一個(gè)頁(yè)面只能顯示10條,要想爬取所有的可以設(shè)置滑動(dòng),邊向上滑動(dòng)邊爬取就能獲取所有的數(shù)據(jù)。
具體參數(shù)設(shè)置的flick_distance=1050可以不重不漏的爬取,如下所示:
設(shè)置滑動(dòng)
flick_start_x=540
flick_start_y=192
flick_distance=1050
while True:
driver.swipe(flick_start_x,flick_start_y+flick_distance,flick_start_x,flick_start_y)
爬取
pay_name_list=[]
present_price_list=[]
pay_room_list=[]
pay_ru_name_list=[]
pay_time_list=[]
flick_start_x=540
flick_start_y=192
flick_distance=1050
while True:
pay_name=driver.find_elements_by_id('pay_name')
for i in range(len(pay_name)):
pay_name_list.append(pay_name[i].text)
present_price=driver.find_elements_by_id('present_price')
for i in range(len(present_price)):
present_price_list.append(present_price[i].text)
pay_room=driver.find_elements_by_id('pay_room')
for i in range(len(pay_room)):
pay_room_list.append(pay_room[i].text)
pay_ru_name=driver.find_elements_by_id('pay_ru_name')
for i in range(len(pay_ru_name)):
pay_ru_name_list.append(pay_ru_name[i].text)
pay_time=driver.find_elements_by_id('pay_time')
for i in range(len(pay_time)):
pay_time_list.append(pay_time[i].text)
driver.swipe(flick_start_x,flick_start_y+flick_distance,flick_start_x,flick_start_y)
time.sleep(2)

轉(zhuǎn)換成dataframe
a=pd.DataFrame([pay_name_list,present_price_list,pay_room_list,pay_ru_name_list,pay_time_list],index=['pay_name_list','present_price_list','pay_room_list','pay_ru_name_list','pay_time_list']) pd.DataFrame(a.T).head(50)

ok,這樣工作就都完成啦,繼續(xù)快樂的搬磚…
到此這篇用基于python的appium爬取b站直播消費(fèi)記錄的文章就介紹到這了,更多相關(guān)python,appium的內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
以文檔處理為例講解豆包API調(diào)用教程(Python)
這篇文章主要介紹了如何在Linux服務(wù)器上配置和使用豆包大模型的API,通過(guò)API處理200萬(wàn)字的文檔,展現(xiàn)了技術(shù)的發(fā)展和應(yīng)用,需要的朋友可以參考下2025-01-01
tensorflow tf.train.batch之?dāng)?shù)據(jù)批量讀取方式
今天小編就為大家分享一篇tensorflow tf.train.batch之?dāng)?shù)據(jù)批量讀取方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
如何在Python中捕獲finally語(yǔ)句中異常消息
正常情況下,finally語(yǔ)句不會(huì)捕獲異常,而是在異常處理完成后執(zhí)行,那么如何在Python中捕獲finally語(yǔ)句中異常消息呢,下面小編就來(lái)和大家詳細(xì)聊聊2024-02-02
python連接FTP服務(wù)器的實(shí)現(xiàn)方法
本文主要介紹了python連接FTP服務(wù)器的實(shí)現(xiàn)方法,主要使用ftp操作進(jìn)行連接FTP服務(wù)器、獲取當(dāng)前目錄文件清單、上傳文件等操作,具有一定的參考價(jià)值,感興趣的可以了解一下2022-06-06
Python如何實(shí)現(xiàn)機(jī)器人聊天
這篇文章主要介紹了Python如何實(shí)現(xiàn)機(jī)器人聊天,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-09-09
Python三百行代碼實(shí)現(xiàn)飛機(jī)大戰(zhàn)
飛機(jī)大戰(zhàn)想必大家可能玩過(guò)微信的這款小游戲,給我的感覺是這款游戲怎么可以做得這么好呢,操作簡(jiǎn)單,容易上手,簡(jiǎn)直是“老少皆宜”啊,既然這款游戲這么棒,能否自己動(dòng)手用 Python 來(lái)實(shí)現(xiàn)呢?事實(shí)證明是可以的2022-09-09

