<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python爬蟲(chóng)學(xué)習(xí)教程:爬取b站直播消費(fèi)記錄!

          共 2979字,需瀏覽 6分鐘

           ·

          2021-04-19 10:34

          基于python的Appium進(jìn)行b站直播消費(fèi)記錄爬取

          之前看文章說(shuō)fiddler也可以進(jìn)行爬取,但嘗試了一下沒(méi)成功,這次選擇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)入模塊

          1. from appium import webdriver

          2. import numpy as np

          3. import pandas as pd

          4. import time

          通過(guò)程序打開(kāi)手機(jī)b站app

          1. desired_caps = {

          2. 'platformName': 'Android', # 被測(cè)手機(jī)是安卓

          3. 'platformVersion': '10', # 手機(jī)安卓版本

          4. 'deviceName': 'xxx', # 設(shè)備名,安卓手機(jī)可以隨意填寫(xiě)

          5. 'appPackage': 'tv.danmaku.bili', # 啟動(dòng)APP Package名稱

          6. 'appActivity': '.ui.splash.SplashActivity', # 啟動(dòng)Activity名稱

          7. 'unicodeKeyboard': True, # 使用自帶輸入法,輸入中文時(shí)填True

          8. 'resetKeyboard': True, # 執(zhí)行完程序恢復(fù)原來(lái)輸入法

          9. 'noReset': True, # 不要重置App,如果為False的話,執(zhí)行完腳本后,app的數(shù)據(jù)會(huì)清空,比如你原本登錄了,執(zhí)行完腳本后就退出登錄了

          10. 'newCommandTimeout': 6000,

          11. 'automationName': 'UiAutomator2'

          12. }

          打開(kāi)b站

          1. # 連接Appium Server,初始化自動(dòng)化環(huán)境

          2. driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

          3. # 設(shè)置等待時(shí)間,如果不給時(shí)間的話可能會(huì)找不到元素

          4. driver.implicitly_wait(4)

          打開(kāi)之后呈現(xiàn)如下頁(yè)面

          在手機(jī)上點(diǎn)擊我的——我的直播——消費(fèi)記錄,查看個(gè)人消費(fèi)記錄,

          當(dāng)然也可以寫(xiě)兩行代碼來(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)

          1. flick_start_x=540

          2. flick_start_y=192

          3. flick_distance=1050

          4. while True:

          5. driver.swipe(flick_start_x,flick_start_y+flick_distance,flick_start_x,flick_start_y)

          爬取

          1. pay_name_list=[]

          2. present_price_list=[]

          3. pay_room_list=[]

          4. pay_ru_name_list=[]

          5. pay_time_list=[]

          6. flick_start_x=540

          7. flick_start_y=192

          8. flick_distance=1050

          9. while True:

          10. pay_name=driver.find_elements_by_id('pay_name')

          11. for i in range(len(pay_name)):

          12. pay_name_list.append(pay_name[i].text)

          13. present_price=driver.find_elements_by_id('present_price')

          14. for i in range(len(present_price)):

          15. present_price_list.append(present_price[i].text)

          16. pay_room=driver.find_elements_by_id('pay_room')

          17. for i in range(len(pay_room)):

          18. pay_room_list.append(pay_room[i].text)

          19. pay_ru_name=driver.find_elements_by_id('pay_ru_name')

          20. for i in range(len(pay_ru_name)):

          21. pay_ru_name_list.append(pay_ru_name[i].text)

          22. pay_time=driver.find_elements_by_id('pay_time')

          23. for i in range(len(pay_time)):

          24. pay_time_list.append(pay_time[i].text)

          25. driver.swipe(flick_start_x,flick_start_y+flick_distance,flick_start_x,flick_start_y)

          26. time.sleep(2)

          轉(zhuǎn)換成dataframe

          1. 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'])

          2. pd.DataFrame(a.T).head(50)

          ok,這樣工作就都完成啦,繼續(xù)快樂(lè)的搬磚…

          掃下方二維碼加老師微信

          或是搜索老師微信號(hào):XTUOL1988【切記備注學(xué)習(xí)Python】

          邀您來(lái)聽(tīng)Python web開(kāi)發(fā),Python爬蟲(chóng),Python數(shù)據(jù)分析,人工智能 免費(fèi)精品教程0基礎(chǔ)入門(mén)到企業(yè)項(xiàng)目實(shí)戰(zhàn)教學(xué)!


          掃一掃
          更多咨詢?cè)缰溃?/p>



          歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持


          萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行

          *聲明:本文于網(wǎng)絡(luò)整理,版權(quán)歸原作者所有,如來(lái)源信息有誤或侵犯權(quán)益,請(qǐng)聯(lián)系我們刪除或授權(quán)事宜

          瀏覽 68
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  豆花视频在线观看一区二区三区 | 午夜网久久久成人 | 蜜桃秘 无码一区二区三区 | 91九色蝌蚪视频 | 99国产在线观看免费视频 |