用基于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实现从百度API获取天气的方法
Mar 11 Python
python实现通过pil模块对图片格式进行转换的方法
Mar 24 Python
深入解析Python中的变量和赋值运算符
Oct 12 Python
解析Python中的__getitem__专有方法
Jun 27 Python
Python 通过pip安装Django详细介绍
Apr 28 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
Jul 28 Python
python+matplotlib演示电偶极子实例代码
Jan 12 Python
python连接、操作mongodb数据库的方法实例详解
Sep 11 Python
Python综合应用名片管理系统案例详解
Jan 03 Python
Pytorch 中retain_graph的用法详解
Jan 07 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
Apr 21 Python
python自动计算图像数据集的RGB均值
Jun 18 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
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
zen cart新进商品的随机排序修改方法
2010/09/10 PHP
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
2011/08/08 PHP
PHP闭包(Closure)使用详解
2013/05/02 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
2014/09/04 PHP
php实现简单的语法高亮函数实例分析
2015/04/27 PHP
PHP PDOStatement::setFetchMode讲解
2019/02/03 PHP
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
js或者jquery判断图片是否加载完成实现代码
2013/03/20 Javascript
JS 日期比较大小的简单实例
2014/01/13 Javascript
javascript中的return和闭包函数浅析
2014/06/06 Javascript
Bootstrap table 定制提示语的加载过程
2017/02/20 Javascript
Angular5.1新功能分享
2017/12/21 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
node.JS事件机制与events事件模块的使用方法详解
2020/02/06 Javascript
[54:30]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
[55:11]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第一场 11.26
2020/11/30 DOTA
Python实现注册登录系统
2017/08/08 Python
Python实现k-means算法
2018/02/23 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
python实现网站微信登录的示例代码
2019/09/18 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
2019/12/10 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
2020/07/13 Python
详解CSS3弹性伸缩盒
2020/09/21 HTML / CSS
英国高街奥特莱斯:Highstreet Outlet
2019/11/21 全球购物
Java中采用什么结构来捕获、处理异常?各子句的顺序、功能如何
2013/10/07 面试题
初中数学教学反思
2014/01/16 职场文书
DIY手工制作经营店创业计划书
2014/02/01 职场文书
2014年采购工作总结
2014/11/20 职场文书
2015年行风建设工作总结
2015/05/15 职场文书