用基于python的appium爬取b站直播消费记录

作者:mister1 时间:2021-08-03 21:57:23 

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

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

#环境配置参考

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

具体可以参考这篇博客,讲的算是很清楚啦

https://www.jb51.net/article/209859.htm

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

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

导入模块


from appium import webdriver
import numpy as np
import pandas as pd
import time

通过程序打开手机b站app


desired_caps = {
   'platformName': 'Android',  # 被测手机是安卓
   'platformVersion': '10',  # 手机安卓版本
   'deviceName': 'xxx',  # 设备名,安卓手机可以随意填写
   'appPackage': 'tv.danmaku.bili',  # 启动APP Package名称
   'appActivity': '.ui.splash.SplashActivity',  # 启动Activity名称
   'unicodeKeyboard': True,  # 使用自带输入法,输入中文时填True
   'resetKeyboard': True,  # 执行完程序恢复原来输入法
   'noReset': True,  # 不要重置App,如果为False的话,执行完脚本后,app的数据会清空,比如你原本登录了,执行完脚本后就退出登录了
   'newCommandTimeout': 6000,
   'automationName': 'UiAutomator2'
}

打开b站


# 连接Appium Server,初始化自动化环境
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 设置等待时间,如果不给时间的话可能会找不到元素
driver.implicitly_wait(4)

打开之后呈现如下页面

用基于python的appium爬取b站直播消费记录

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

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

用基于python的appium爬取b站直播消费记录

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

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

设置滑动


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)

用基于python的appium爬取b站直播消费记录

转换成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)

用基于python的appium爬取b站直播消费记录

ok,这样工作就都完成啦,继续快乐的搬砖…

来源:https://blog.csdn.net/mister1/article/details/115705084

标签:python,appium,爬取
0
投稿

猜你喜欢

  • 基于JS实现动态跟随特效的示例代码

    2023-06-30 11:15:16
  • 为什么从Python 3.6开始字典有序并效率更高

    2021-03-26 15:29:36
  • MySQL适配器PyMySQL详解

    2024-01-16 23:49:11
  • linux安装mysql和使用c语言操作数据库的方法 c语言连接mysql

    2024-01-12 20:31:03
  • Python实现从PPT中导出高分辨率图片

    2023-01-03 16:29:08
  • Pytorch的安装过程之pip、conda、Docker容器安装

    2021-05-20 00:07:51
  • python微信跳一跳系列之棋子定位颜色识别

    2023-01-16 04:52:49
  • golang交叉编译详细

    2024-05-02 16:26:31
  • mysql 8.0.13 安装配置方法图文教程

    2024-01-14 15:20:52
  • vue自定义filters过滤器

    2024-04-30 08:45:12
  • 同时安装vs2005团队开发版和sql 2005企业版的方法(downmoon原作)

    2024-01-17 21:11:39
  • PHP 解决utf-8和gb2312编码转换问题

    2024-04-29 13:56:45
  • Python序列化基础知识(json/pickle)

    2021-04-24 01:09:34
  • python实现下载指定网址所有图片的方法

    2021-05-17 22:12:16
  • python合并已经存在的sheet数据到新sheet的方法

    2023-07-25 18:05:51
  • python将每个单词按空格分开并保存到文件中

    2023-07-01 12:46:31
  • Python使用GitPython操作Git版本库的方法

    2021-04-28 07:22:16
  • 更新pip3与pyttsx3文字语音转换的实现方法

    2021-04-29 13:55:36
  • 详解微信小程序网络请求接口封装实例

    2024-06-12 04:08:54
  • 高效地获取XMLhttp对象

    2010-01-19 13:49:00
  • asp之家 网络编程 m.aspxhome.com