Python爬虫学习教程:爬取b站直播消费记录!

python教程

共 2979字,需浏览 6分钟

 ·

2021-04-19 10:34

基于python的Appium进行b站直播消费记录爬取

之前看文章说fiddler也可以进行爬取,但尝试了一下没成功,这次选择appium进行爬取。类似的,可以运用爬取微信朋友圈和抖音等手机app相关数据

正文

#环境配置参考

前期工作准备,需要安装python、jdk、PyCharm、Appium-windows-x.x、Appium_Python_Client、android SDK,pycharm可以用anaconda的jupyter来替代

前期准备工作配置需要不停的安装和配置环境变量,也是个相对枯燥的过程

完成以后就可以真正爬取啦

导入模块

  1. from appium import webdriver

  2. import numpy as np

  3. import pandas as pd

  4. import time

通过程序打开手机b站app

  1. desired_caps = {

  2. 'platformName': 'Android', # 被测手机是安卓

  3. 'platformVersion': '10', # 手机安卓版本

  4. 'deviceName': 'xxx', # 设备名,安卓手机可以随意填写

  5. 'appPackage': 'tv.danmaku.bili', # 启动APP Package名称

  6. 'appActivity': '.ui.splash.SplashActivity', # 启动Activity名称

  7. 'unicodeKeyboard': True, # 使用自带输入法,输入中文时填True

  8. 'resetKeyboard': True, # 执行完程序恢复原来输入法

  9. 'noReset': True, # 不要重置App,如果为False的话,执行完脚本后,app的数据会清空,比如你原本登录了,执行完脚本后就退出登录了

  10. 'newCommandTimeout': 6000,

  11. 'automationName': 'UiAutomator2'

  12. }

打开b站

  1. # 连接Appium Server,初始化自动化环境

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

  3. # 设置等待时间,如果不给时间的话可能会找不到元素

  4. driver.implicitly_wait(4)

打开之后呈现如下页面

在手机上点击我的——我的直播——消费记录,查看个人消费记录,

当然也可以写两行代码来实现这个过程(这里选择跳过),如下图所示

因为这个消费记录很多,一个页面只能显示10条,要想爬取所有的可以设置滑动,边向上滑动边爬取就能获取所有的数据。

具体参数设置的flick_distance=1050可以不重不漏的爬取,如下所示:

设置滑动

  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)

转换成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,这样工作就都完成啦,继续快乐的搬砖…

扫下方二维码加老师微信

或是搜索老师微信号:XTUOL1988【切记备注学习Python】

邀您来听Python web开发,Python爬虫,Python数据分析,人工智能 免费精品教程0基础入门到企业项目实战教学!


扫一扫
更多咨询早知道!



欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持


万水千山总是情,点个【在看】行不行

*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜

浏览 48
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报