基于python的appium进行b站直播消费记录爬取
之前看文章说fiddler也可以进行爬取,但尝试了一下没成功,这次选择appium进行爬取。类似的,可以运用爬取微信朋友圈和抖音等手机app相关数据
正文
#环境配置参考
前期工作准备,需要安装python、jdk、pycharm、appium-windows-x.x、appium_python_client、android sdk,pycharm可以用anaconda的jupyter来替代
具体可以参考这篇博客,讲的算是很清楚啦
前期准备工作配置需要不停的安装和配置环境变量,也是个相对枯燥的过程
完成以后就可以真正爬取啦
导入模块
1
2
3
4
|
from appium import webdriver
import numpy as np
import pandas as pd
import time
|
通过程序打开手机b站app
1
2
3
4
5
6
7
8
9
10
11
12
|
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站
1
2
3
4
|
# 连接appium server,初始化自动化环境
driver = webdriver.remote( 'http://localhost:4723/wd/hub' , desired_caps)
# 设置等待时间,如果不给时间的话可能会找不到元素
driver.implicitly_wait( 4 )
|
打开之后呈现如下页面
在手机上点击我的——我的直播——消费记录,查看个人消费记录,
当然也可以写两行代码来实现这个过程(这里选择跳过),如下图所示
因为这个消费记录很多,一个页面只能显示10条,要想爬取所有的可以设置滑动,边向上滑动边爬取就能获取所有的数据。
具体参数设置的flick_distance=1050可以不重不漏的爬取,如下所示:
设置滑动
1
2
3
4
5
|
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)
|
爬取
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
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 )
|
转换成dataframe
1
2
|
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 )
|
ok,这样工作就都完成啦,继续快乐的搬砖…
到此这篇用基于python的appium爬取b站直播消费记录的文章就介绍到这了,更多相关python,appium的内容请搜索服务器之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/mister1/article/details/115705084