用基于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 相关文章推荐
MySQLdb ImportError: libmysqlclient.so.18解决方法
Aug 21 Python
用Python从零实现贝叶斯分类器的机器学习的教程
Mar 31 Python
Python实现对excel文件列表值进行统计的方法
Jul 25 Python
解析Python中的eval()、exec()及其相关函数
Dec 20 Python
Python实现合并两个有序链表的方法示例
Jan 31 Python
详解Python sys.argv使用方法
May 10 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
Jul 17 Python
django实现将后台model对象转换成json对象并传递给前端jquery
Mar 16 Python
在tensorflow以及keras安装目录查询操作(windows下)
Jun 19 Python
python算的上脚本语言吗
Jun 22 Python
Python如何爬取b站热门视频并导入Excel
Aug 10 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 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
Windows中安装Apache2和PHP4权威指南
2006/11/18 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
2014/02/02 PHP
smarty模板引擎中变量及变量修饰器用法实例
2015/01/22 PHP
Laravel如何同时连接多个数据库详解
2019/08/13 PHP
javascript concat数组累加 示例
2009/09/03 Javascript
JS实现图片翻书效果示例代码
2013/09/09 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
jQuery弹出层插件popShow用法示例
2017/01/23 Javascript
jQuery Pagination分页插件使用方法详解
2017/02/28 Javascript
vue.js简单配置axios的方法详解
2017/12/13 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
浅谈JavaScript中this的指向更改
2020/07/28 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
2020/11/01 Javascript
JS canvas实现画板和签字板功能
2021/02/23 Javascript
[04:13]2018国际邀请赛典藏宝瓶Ⅱ饰品一览
2018/07/21 DOTA
Python脚本简单实现打开默认浏览器登录人人和打开QQ的方法
2016/04/12 Python
Python selenium 三种等待方式解读
2016/09/15 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
2020/10/30 Python
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
Expedia韩国官网:亚洲发展最快的在线旅游门户网站
2018/02/26 全球购物
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
Linux机考试题
2015/07/17 面试题
就业自荐书
2013/12/05 职场文书
办公室助理岗位职责
2013/12/25 职场文书
运动会广播稿300字
2014/01/10 职场文书
水利学院求职自荐书
2014/02/01 职场文书
捐献物资倡议书范文
2014/05/19 职场文书
党员个人对照检查材料
2014/10/01 职场文书
2015年前台文员工作总结
2015/05/18 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python
MySQL 查询速度慢的原因
2021/05/25 MySQL
Vue.Draggable实现交换位置
2022/04/07 Vue.js