用基于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 相关文章推荐
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
Dec 04 Python
python回调函数用法实例分析
May 09 Python
Python常用知识点汇总
May 08 Python
Python字符串格式化的方法(两种)
Sep 19 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
May 21 Python
python脚本开机自启的实现方法
Jun 28 Python
Django rstful登陆认证并检查session是否过期代码实例
Aug 13 Python
命令行运行Python脚本时传入参数的三种方式详解
Oct 11 Python
python实现局域网内实时通信代码
Dec 22 Python
基于Pycharm加载多个项目过程图解
Jan 19 Python
浅谈pytorch torch.backends.cudnn设置作用
Feb 20 Python
分享几种python 变量合并方法
Mar 20 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时间不正确的解决方法
2008/04/09 PHP
round robin权重轮循算法php实现代码
2016/05/28 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
JS实现两个大数(整数)相乘
2014/04/28 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
JS实现进入页面时渐变背景色的方法
2015/02/25 Javascript
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
详解JavaScript中双等号引起的隐性类型转换
2016/05/30 Javascript
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
Javascript中的prototype与继承
2017/02/06 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
[01:54]TI珍贵瞬间系列(五):压力
2020/08/29 DOTA
正确理解python中的关键字“with”与上下文管理器
2017/04/21 Python
Python中类的初始化特殊方法
2017/12/01 Python
python处理csv中的空值方法
2018/06/22 Python
python 求某条线上特定x值或y值的点坐标方法
2019/07/09 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
英国电信商店:BT Shop
2019/12/17 全球购物
Crocs欧洲官网:Crocs Europe
2020/01/14 全球购物
Linux中如何设置Java环境变量(Ubuntu)
2016/07/24 面试题
《槐乡五月》教学反思
2014/04/25 职场文书
优秀的应届生自荐信
2014/05/23 职场文书
学校读书活动总结
2014/06/30 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
三下乡个人总结
2015/03/04 职场文书
综合办公室岗位职责
2015/04/11 职场文书
2015年社区计生工作总结
2015/04/21 职场文书
运动会5000米加油稿
2015/07/21 职场文书
谢师宴学生答谢词
2015/09/30 职场文书
python中的None与NULL用法说明
2021/05/25 Python