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


Posted in Python onApril 17, 2021

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

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

正文

#环境配置参考

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

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

https://www.3water.com/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,这样工作就都完成啦,继续快乐的搬砖…

到此这篇用基于python的appium爬取b站直播消费记录的文章就介绍到这了,更多相关python,appium的内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python类型强制转换long to int的代码
Feb 10 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
Jun 29 Python
python Pandas 读取txt表格的实例
Apr 29 Python
Django之Mode的外键自关联和引用未定义的Model方法
Dec 15 Python
详解python算法之冒泡排序
Mar 05 Python
django 连接数据库 sqlite的例子
Aug 14 Python
Python实现手机号自动判断男女性别(实例解析)
Dec 22 Python
pytorch中的自定义反向传播,求导实例
Jan 06 Python
Python制作简易版小工具之计算天数的实现思路
Feb 13 Python
django 前端页面如何实现显示前N条数据
Mar 16 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
Dec 11 Python
图神经网络GNN算法
May 11 Python
解决numpy数组互换两行及赋值的问题
Apr 17 #Python
用Python实现Newton插值法
Apr 17 #Python
Python+Appium新手教程
Pytest之测试命名规则的使用
Apr 16 #Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
Python实现Telnet自动连接检测密码的示例
You might like
学习使用PHP数组
2006/10/09 PHP
php $_SERVER["REQUEST_URI"]获取值的通用解决方法
2010/06/21 PHP
关于crontab的使用详解
2013/06/24 PHP
php+js实现的无刷新下载文件功能示例
2019/08/23 PHP
jquery中动态效果小结
2010/12/16 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
2017/10/31 Javascript
微信小程序使用checkbox显示多项选择框功能【附源码下载】
2017/12/11 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
Angular整合zTree的示例代码
2018/01/24 Javascript
json对象及数组键值的深度大小写转换问题详解
2018/03/30 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
微信小程序实现授权登录
2019/05/15 Javascript
小程序使用分包的示例代码
2020/03/23 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
2020/04/28 Javascript
element中el-container容器与div布局区分详解
2020/05/13 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
[01:15:44]首部DOTA2纪录片今日23时全网上映
2014/03/19 DOTA
python基于twisted框架编写简单聊天室
2018/01/02 Python
python基础教程项目三之万能的XML
2018/04/02 Python
django使用admin站点上传图片的实例
2019/07/28 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
Python使用docx模块实现刷题功能代码
2020/02/13 Python
Python调用C/C++的方法解析
2020/08/05 Python
基于HTML5 FileSystem API的使用介绍
2013/04/24 HTML / CSS
Order by的几种用法
2013/06/16 面试题
旅游管理实习自我鉴定
2013/09/29 职场文书
园长自我鉴定
2013/10/06 职场文书
关于毕业的广播稿
2014/01/10 职场文书
美术指导助理求职信
2014/04/20 职场文书
小班幼儿评语大全
2014/04/30 职场文书
幼儿生日活动方案
2014/08/27 职场文书
祖国在我心中演讲稿450字
2014/09/05 职场文书