用基于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笔记(2)
Oct 24 Python
python中__call__内置函数用法实例
Jun 04 Python
Python中在for循环中嵌套使用if和else语句的技巧
Jun 20 Python
详解Python 模拟实现生产者消费者模式的实例
Aug 10 Python
利用标准库fractions模块让Python支持分数类型的方法详解
Aug 11 Python
解决Spyder中图片显示太小的问题
Apr 27 Python
Python3.7 新特性之dataclass装饰器
May 27 Python
python将字母转化为数字实例方法
Oct 04 Python
python global和nonlocal用法解析
Feb 03 Python
执行Python程序时模块报错问题
Mar 26 Python
Selenium自动化测试工具使用方法汇总
Jun 12 Python
基于selenium及python实现下拉选项定位select
Jul 22 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
php5中类的学习
2008/03/28 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
2016/08/01 PHP
用javascript实现分割提取页面所需内容
2007/05/09 Javascript
javascript 打印页面代码
2009/03/24 Javascript
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
第一次动手实现bootstrap table分页效果
2016/09/22 Javascript
JavaScript中三种常见的排序方法
2017/02/24 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
jQuery实现 RadioButton做必选校验功能
2017/06/15 jQuery
jQuery Datatables表头不对齐的解决办法
2017/11/27 jQuery
javascript+css3开发打气球小游戏完整代码
2017/11/28 Javascript
python实现读取大文件并逐行写入另外一个文件
2018/04/19 Python
谈谈Python中的while循环语句
2019/03/10 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
python实现windows倒计时锁屏功能
2019/07/30 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
python进度条显示之tqmd模块
2020/08/22 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
css3 border旋转时的动画应用
2016/01/22 HTML / CSS
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
加拿大著名的奢侈品购物网站:SSENSE(支持中文)
2020/06/25 全球购物
如何写一个自定义标签
2012/12/28 面试题
国际经济贸易专业推荐信
2013/11/06 职场文书
大学学习生活感言
2014/01/18 职场文书
婚礼答谢词
2015/01/04 职场文书
区域经理岗位职责
2015/02/02 职场文书
法学专业求职信范文
2015/03/19 职场文书
导游词之张家口
2019/12/13 职场文书
Nginx tp3.2.3 404问题解决方案
2021/03/31 Servers