Python爬虫抓取手机APP的传输数据


Posted in Python onJanuary 22, 2016

大多数APP里面返回的是json格式数据,或者一堆加密过的数据 。这里以超级课程表APP为例,抓取超级课程表里用户发的话题。

1、抓取APP数据包

方法详细可以参考这篇博文:Fiddler如何抓取手机APP数据包

得到超级课程表登录的地址:http://120.55.151.61/V2/StudentSkip/loginCheckV4.action

表单:

Python爬虫抓取手机APP的传输数据

表单中包括了用户名和密码,当然都是加密过了的,还有一个设备信息,直接post过去就是。

另外必须加header,一开始我没有加header得到的是登录错误,所以要带上header信息。

Python爬虫抓取手机APP的传输数据

2、登录

登录代码:

import urllib2
from cookielib import CookieJar
loginUrl = 'http://120.55.151.61/V2/StudentSkip/loginCheckV4.action'
headers = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'User-Agent': 'Dalvik/1.6.0 (Linux; U; Android 4.1.1; M040 Build/JRO03H)',
'Host': '120.55.151.61',
'Connection': 'Keep-Alive',
'Accept-Encoding': 'gzip',
'Content-Length': '207',
}
loginData = 'phoneBrand=Meizu&platform=1&deviceCode=868033014919494&account=FCF030E1F2F6341C1C93BE5BBC422A3D&phoneVersion=16&password=A55B48BB75C79200379D82A18C5F47D6&channel=MXMarket&phoneModel=M040&versionNumber=7.2.1&'
cookieJar = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))
req = urllib2.Request(loginUrl, loginData, headers)
loginResult = opener.open(req).read()
print loginResult

登录成功 会返回一串账号信息的json数据

Python爬虫抓取手机APP的传输数据

和抓包时返回数据一样,证明登录成功

Python爬虫抓取手机APP的传输数据

3、抓取数据

用同样方法得到话题的url和post参数

做法就和模拟登录网站一样。详见:Python爬虫模拟登录带验证码网站

下见最终代码,有主页获取和下拉加载更新。可以无限加载话题内容。

#!/usr/local/bin/python2.7
# -*- coding: utf8 -*-
"""
超级课程表话题抓取
"""
import urllib2
from cookielib import CookieJar
import json
''' 读Json数据 '''
def fetch_data(json_data):
data = json_data['data']
timestampLong = data['timestampLong']
messageBO = data['messageBOs']
topicList = []
for each in messageBO:
topicDict = {}
if each.get('content', False):
topicDict['content'] = each['content']
topicDict['schoolName'] = each['schoolName']
topicDict['messageId'] = each['messageId']
topicDict['gender'] = each['studentBO']['gender']
topicDict['time'] = each['issueTime']
print each['schoolName'],each['content']
topicList.append(topicDict)
return timestampLong, topicList
''' 加载更多 '''
def load(timestamp, headers, url):
headers['Content-Length'] = '159'
loadData = 'timestamp=%s&phoneBrand=Meizu&platform=1&genderType=-1&topicId=19&phoneVersion=16&selectType=3&channel=MXMarket&phoneModel=M040&versionNumber=7.2.1&' % timestamp
req = urllib2.Request(url, loadData, headers)
loadResult = opener.open(req).read()
loginStatus = json.loads(loadResult).get('status', False)
if loginStatus == 1:
print 'load successful!'
timestamp, topicList = fetch_data(json.loads(loadResult))
load(timestamp, headers, url)
else:
print 'load fail'
print loadResult
return False
loginUrl = 'http://120.55.151.61/V2/StudentSkip/loginCheckV4.action'
topicUrl = 'http://120.55.151.61/V2/Treehole/Message/getMessageByTopicIdV3.action'
headers = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'User-Agent': 'Dalvik/1.6.0 (Linux; U; Android 4.1.1; M040 Build/JRO03H)',
'Host': '120.55.151.61',
'Connection': 'Keep-Alive',
'Accept-Encoding': 'gzip',
'Content-Length': '207',
}
''' ---登录部分--- '''
loginData = 'phoneBrand=Meizu&platform=1&deviceCode=868033014919494&account=FCF030E1F2F6341C1C93BE5BBC422A3D&phoneVersion=16&password=A55B48BB75C79200379D82A18C5F47D6&channel=MXMarket&phoneModel=M040&versionNumber=7.2.1&'
cookieJar = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))
req = urllib2.Request(loginUrl, loginData, headers)
loginResult = opener.open(req).read()
loginStatus = json.loads(loginResult).get('data', False)
if loginResult:
print 'login successful!'
else:
print 'login fail'
print loginResult
''' ---获取话题--- '''
topicData = 'timestamp=0&phoneBrand=Meizu&platform=1&genderType=-1&topicId=19&phoneVersion=16&selectType=3&channel=MXMarket&phoneModel=M040&versionNumber=7.2.1&'
headers['Content-Length'] = '147'
topicRequest = urllib2.Request(topicUrl, topicData, headers)
topicHtml = opener.open(topicRequest).read()
topicJson = json.loads(topicHtml)
topicStatus = topicJson.get('status', False)
print topicJson
if topicStatus == 1:
print 'fetch topic success!'
timestamp, topicList = fetch_data(topicJson)
load(timestamp, headers, topicUrl)

结果:

Python爬虫抓取手机APP的传输数据

Python 相关文章推荐
Python牛刀小试密码爆破
Feb 03 Python
python 切片和range()用法说明
Mar 24 Python
Python常用字符串替换函数strip、replace及sub用法示例
May 21 Python
python将excel转换为csv的代码方法总结
Jul 03 Python
Python Pandas 如何shuffle(打乱)数据
Jul 30 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
Feb 29 Python
Python使用Matlab命令过程解析
Jun 04 Python
Python列表推导式实现代码实例
Sep 09 Python
Python猫眼电影最近上映的电影票房信息
Sep 18 Python
Python实现迪杰斯特拉算法过程解析
Sep 18 Python
python多线程方法详解
Jan 18 Python
Python 列表排序方法reverse、sort、sorted详解
Jan 22 #Python
Python中使用urllib2模块编写爬虫的简单上手示例
Jan 20 #Python
Python模拟百度登录实例详解
Jan 20 #Python
Python的Scrapy爬虫框架简单学习笔记
Jan 20 #Python
使用Python编写爬虫的基本模块及框架使用指南
Jan 20 #Python
Python中urllib+urllib2+cookielib模块编写爬虫实战
Jan 20 #Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
Jan 20 #Python
You might like
用缓存实现静态页面的测试
2006/12/06 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
php将字符串随机分割成不同长度数组的方法
2015/06/01 PHP
PHP获取链表中倒数第K个节点的方法
2018/01/18 PHP
PHP的PDO预定义常量讲解
2019/01/24 PHP
PHP接入支付宝接口失效流程详解
2020/11/10 PHP
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
JS函数重载的解决方案
2014/05/13 Javascript
JS网页在线获取鼠标坐标值的方法
2015/02/28 Javascript
用JavaScript实现对话框的教程
2015/06/04 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
2015/12/09 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
javascript实现二叉树遍历的代码
2017/06/08 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
vue中keep-alive的用法及问题描述
2018/05/15 Javascript
详解如何在vue-cli中使用vuex
2018/08/07 Javascript
npm配置国内镜像资源+淘宝镜像的方法
2018/09/07 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
2020/03/04 Javascript
Python解析xml中dom元素的方法
2015/03/12 Python
Python函数和模块的使用总结
2019/05/20 Python
Python对接 xray 和微信实现自动告警
2019/09/17 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
2020/05/03 Python
浅谈Python中的继承
2020/06/19 Python
static关键字的用法
2013/10/07 面试题
nohup的用法
2012/11/26 面试题
群众路线自我剖析材料
2014/10/08 职场文书
看上去很美观后感
2015/06/10 职场文书
无工作证明怎么写
2015/06/15 职场文书
《正比例》教学反思
2016/02/23 职场文书