用基于python的appium爬取b站直播消费记录
作者:mister1 发布时间:2021-08-03 21:57:23
标签:python,appium,爬取
基于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)
打开之后呈现如下页面
在手机上点击我的——我的直播——消费记录,查看个人消费记录,
当然也可以写两行代码来实现这个过程(这里选择跳过),如下图所示
因为这个消费记录很多,一个页面只能显示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)
转换成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,这样工作就都完成啦,继续快乐的搬砖…
来源:https://blog.csdn.net/mister1/article/details/115705084


猜你喜欢
- 概述当我们使用组件库的时候,某些组件并不是直接放到模板当中进行使用,而是通过api的方式调用生成组件并且挂在到我们的页面中,其中最常见的就是
- 监控Linux服务器嘛,脚本逻辑基本上是用os.popen模块,然后把获取到的结果通过split切分成一个list,再拿目标list值和我阈
- 本文实例讲述了php简单定时执行任务的实现方法。分享给大家供大家参考。具体实现方法如下:<?phpignore_user_abort(
- 用法分析 在查看SRGAN源码时有如下损失函数,其中设置了retain_graph=True,其作用是什么?################
- php操作xml最近计划写个人的小网站,一系列原因选择了用php来写,最大的问题就是虽然php很流行,但我从来没有接触过php,看了一个多星
- 最近在优化公司框架 trpc 时发现了一个热重启相关的问题,优化之余也总结沉淀下,对 go 如何实现热重启这方面的内容做一个简单的梳理。1.
- 对python中的控制条件、循环和跳出详解代码缩进(代码块):python用缩进表示代码块,没有其他语言的大括号缩进是强制检查,整个代码缩进
- 题目内容:对于三角形,三边长分别为a, b, c,给定a和b之间的夹角C,则有:。编写程序,使得输入三角形的边a, b, c,可求得夹角C(
- plt.title() 是 matplotlib 库中用于设置图形标题的函数。一、基本语法如下plt.title(label, fontdi
- 一、导读通常,开发大量原始代码是一个费时费力的工作而且有时候有很多专业知识我们不可能都一 一弄懂,为了避免这种情况,我们会尽可能多地使用库中
- DataFrame的行和列:df[‘行’, ‘列’]Data
- 本文实例为大家分享了微信小程序实现顶部搜索框的具体代码,供大家参考,具体内容如下这是一个最简单的顶部搜索框,代码如下wxml<view
- 首先要挂代理,但是还不够,pycharm默认不使用代理,需要进行设置找到代理软件的HTTP代理地址,将地址和端口填入设置中即可来源:http
- 一、MySQL的体系结构① 结构图② 各结构的功能连接层:最上层是一些客户端和链接服务,主要完成一些类似于连接处理、授权认证、及相关的安全方
- Pycharm 作为一款针对 Python 的编辑器,配置简单、功能强大、使用起来省时省心,对初学者友好,这也是为什么编程教室一直推荐新手使
- request请求头信息的键会加上HTTP_转换成大写存到request.META中因此你只需要content_range = reques
- 概述迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。延迟计算或惰性
- 一、使用replace+空格ordersdetaildf['商品名称2']=ordersdetaildf['商品名称
- 本文由 kouyubo 整理到现在为止,只有一些已经工作的特性,他们中的一些如下:圆角从web2.0开始,开始流行使用圆角,如果你不使用圆角
- 在本文上两篇中,我们学习了脚本语言 VBScript 的变量、函数、过程和条件语句,本篇将继续给大家介绍 VBScipt 的循环语句,并对脚