Python自动化爬取App数据
基本环境配置
版本:Python3
系统:Windows
需要安装:
1.JDK - Download JDK,Appium要求用户必须配置JAVA环境, 否则启动Seesion报错。
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789
2.Appium - Download Appium, 安装过程请自行搜索。
3.Android SDK - Download SDK
4. Selenium - 建议使用低版本的Python Selenium库,在Chrome高版本可能会报错。例如:
pip3 install selenium==2.48.0
5. chromedriver.exe - Download Chromedriver, 确保版本要匹配, 然后将 .exe 程序放在"..Python\Python36\Scripts"目录下。
6. pymongo
pip3 install pymongo
7. MongoDB Server - Download MongoDB
爬取思路
爬取思路:
模拟登录
抓取动态
保存数据
Android SDK的安装与配置
打开Android Studio, 选择"Configure->SDK Manager->Apperance&Behavior->System Settings->Android SDK", 选择对应安卓机版本的SDK,如图:
此外,还需要将SDK所在路径添加到系统环境变量中,否则报错。
Desired Capabilites 参数
分别是:platfornName, deviceName, appPackage, appActivity。前两个可通过如下命令获取, 前提是连接手机、打开USB调试:
adb devices -l
后两个参数请移步:获取appPackage和appActivity
开启安卓的" 开发者选项、USB调试 "
测试之前,确保打开 开发者选项、USB调试。开发者模式确保调试程序在手机安装辅助软件:Unlock, Appium Settings;USB调试主要是利用Appium内置驱动打开APP。此外,要保持屏幕常亮。
5. 节点ID或XPATH值获取
安卓微信节点获取,相对比较容易获取,比如获取"登录"ID值,启动Session后只需点击屏幕左侧安卓屏的登录按钮,中间就会自动定位到所在节点,最右侧还会显示该节点的所有属性。如图:
对于文本输入框,只需要点击最右侧的"send text"即可。
"是否匹配通讯录"
这里选择"否", 理由:重新登录进入微信后会自动加载本地数据,耗时较长,如果匹配通讯录好友,增加耗时,可能在TIMEOUT时间内获取不到节点,导致程序终止。我这里选择了"是", 如图:
朋友圈信息获取思路
获取当前显示的朋友圈每条状态对应的区块元素,遍历每个区块元素,再获取内部显示的用户名、正文、发布时间,代码如下:
# items存储当前页面所有发布的朋友圈信息
items = self.wait.until(
EC.presence_of_all_elements_located(
# 每个ej9节点对应一条朋友圈数据
(By.XPATH, '//*[@resource-id="com.tencent.mm:id/ej9"]/android.widget.LinearLayout')))
for item in items:
try:
# 昵称
nickname = item.find_element_by_id('com.tencent.mm:id/b5o').get_attribute('text')
# 正文
content = item.find_element_by_id('com.tencent.mm:id/ejc').get_attribute('text')
# 日期
date = item.find_element_by_id('com.tencent.mm:id/eec').get_attribute('text')
# 处理日期
date = self.processor.date(date)
data = {
'nickname': nickname,
'content': content,
'date': date,
}
日期处理
日期处理的实现方式,代码如下:
class Processor():
def date(self, datetime):
"""
格式化时间
:param date: 原始时间
:return: 处理后时间
"""
if re.match('\d+分钟前', datetime):
minute = re.match('(\d+)', datetime).group(1)
datetime = time.strftime('%Y-%m-%d', time.localtime(time.time() - float(minute) * 60))
if re.match('\d+小时前', datetime):
hour = re.match('(\d+)', datetime).group(1)
datetime = time.strftime('%Y-%m-%d', time.localtime(time.time() - float(hour) * 60 * 60))
if re.match('昨天', datetime):
datetime = time.strftime('%Y-%m-%d', time.localtime(time.time() - 24 * 60 * 60))
if re.match('\d+天前', datetime):
day = re.match('(\d+)', datetime).group(1)
datetime = time.strftime('%Y-%m-%d', time.localtime((time.time()) - float(day) * 24 * 60 * 60))
return datetime
完整代码
注意事项:
代码中所有节点都须提前通过 Appium新建Session获取(亲测同版本的微信中vivo_x7和Mi_8节点相同,其余机型未知)
建议使用高性能手机测试(MI_8|MI_9等)
运行结果
Python自动化爬取App数据的更多相关文章
- python之爬取网页数据总结(一)
今天尝试使用python,爬取网页数据.因为python是新安装好的,所以要正常运行爬取数据的代码需要提前安装插件.分别为requests Beautifulsoup4 lxml 三个插件 ...
- python爬虫——爬取网页数据和解析数据
1.网络爬虫的基本概念 网络爬虫(又称网络蜘蛛,机器人),就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序.只要浏览器能够做的事情,原则上,爬虫都能够做到. 2 ...
- Python 逆向抓取 APP 数据
今天继续给大伙分享一下 Python 爬虫的教程,这次主要涉及到的是关于某 APP 的逆向分析并抓取数据,关于 APP 的反爬会麻烦一些,比如 Android 端的代码写完一般会进行打包并混淆加密加固 ...
- python爬虫爬取天气数据并图形化显示
前言 使用python进行网页数据的爬取现在已经很常见了,而对天气数据的爬取更是入门级的新手操作,很多人学习爬虫都从天气开始,本文便是介绍了从中国天气网爬取天气数据,能够实现输入想要查询的城市,返回该 ...
- 使用python爬虫爬取股票数据
前言: 编写一个爬虫脚本,用于爬取东方财富网的上海股票代码,并通过爬取百度股票的单个股票数据,将所有上海股票数据爬取下来并保存到本地文件中 系统环境: 64位win10系统,64位python3.6, ...
- python爬虫----爬取阿里数据银行websocket接口
业务需求:爬取阿里品牌数据银行的自定义模块==>>>人群透视==>>>查看报告==>>数据 发现:数据通过websocket接口传递,此类型接口的详细理 ...
- Selenium2+python自动化58-读取Excel数据(xlrd)
前言 当登录的账号有多个的时候,我们一般用excel存放测试数据,本节课介绍,python读取excel方法,并保存为字典格式. 一.环境准备 1.先安装xlrd模块,打开cmd,输入pip inst ...
- Selenium2+python自动化58-读取Excel数据(xlrd)【转载】
前言 当登录的账号有多个的时候,我们一般用excel存放测试数据,本节课介绍,python读取excel方法,并保存为字典格式. 一.环境准备 1.先安装xlrd模块,打开cmd,输入pip inst ...
- 爬虫再探实战(五)———爬取APP数据——超级课程表【四】——情感分析
仔细看的话,会发现之前的词频分析并没有什么卵用...文本分析真正的大哥是NLP,不过,这个坑太大,小白不大敢跳...不过还是忍不住在坑边上往下瞅瞅2333. 言归正传,今天刚了解到boson公司有py ...
随机推荐
- Scala 面向对象(十二):嵌套类
在Scala中,你几乎可以在任何语法结构中内嵌任何语法结构.如在类中可以再定义一个类,这样的类是嵌套类,其他语法结构也是一样. 嵌套类类似于Java中的内部类. Scala嵌套类的使用1 请编写程序, ...
- 空间金字塔池化 ssp-net
<Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition>,这篇paper提出了空间金字 ...
- 手把手从零开始---封装一个vue视频播放器组件
现在,在网页上播放视频已经越来越流行,但是网上的资料鱼龙混杂,很难找到自己想要的,今天小编就自己的亲身开发体验,手把手从零开始---封装一个vue视频播放器组件. 作为一个老道的前端搬砖师,怎么可能会 ...
- 想用@Autowired注入static静态成员?官方不推荐你却还偏要这么做
生命太短暂,不要去做一些根本没有人想要的东西.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习 ...
- SpringDI四种依赖注入方式详解
文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star!搜索关注微信公众号 [码出Offer] 领取各种学习资料! LOGO SpringDI(依赖注入) 一.DI概述 De ...
- JAVA中JSON字符串格式转换
alibabab版本 即com.alibaba.fastjson *以下Node为实体类 //JSON字符串->Map Map map1 = (Map)JSON.parse(strJson); ...
- python多进程之multiprocessing
什么是多进程? 简单的理解:单板上运行的一个程序就是一个进程.进程是操作系统分配资源的最小单位,不同的进程之间资源不共享,进程间通信需要使用特定的方式.python提供了自带的multiprocess ...
- 题解 洛谷 P5331 【[SNOI2019]通信】
考虑用费用流解决本题. 每个哨站看作一个点,并将其拆为两个点,建图方式为: \(S \longrightarrow x_i\) 容量为\(1\),费用为\(0\) \(x_i \longrightar ...
- OFDM通信系统的MATLAB仿真(2)
关于OFDM系统的MATLAB仿真实现的第二篇随笔,在第一篇中,我们讨论的是信号经过AWGN信道的情况,只用添加固定噪声功率的高斯白噪声就好了.但在实际无线信道中,信道干扰常常是加性噪声.多径衰落的结 ...
- Go语言系列之手把手教你撸一个ORM(一)
项目地址:https://github.com/yoyofxteam/yoyodata 欢迎星星,感谢 前言:最近在学习Go语言,就出于学习目的手撸个小架子,欢迎提出宝贵意见,项目使用Mysql数据库 ...