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的Flask框架下收发电子邮件的教程
Apr 21 Python
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
Apr 28 Python
Eclipse中Python开发环境搭建简单教程
Mar 23 Python
python实现读Excel写入.txt的方法
Apr 29 Python
Django Rest framework之权限的实现示例
Dec 17 Python
python Pillow图像处理方法汇总
Oct 16 Python
python 导入数据及作图的实现
Dec 03 Python
PyCharm使用之配置SSH Interpreter的方法步骤
Dec 26 Python
利用Python脚本实现自动刷网课
Feb 03 Python
python图形开发GUI库wxpython使用方法详解
Feb 14 Python
django rest framework serializers序列化实例
May 13 Python
pandas按照列的值排序(某一列或者多列)
Dec 13 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
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
细说浏览器特性检测(2)-通用事件检测
2010/11/05 Javascript
一个基于jquery的文本框记数器
2012/09/19 Javascript
jquery实现邮箱自动补全功能示例分享
2014/02/17 Javascript
一个简单的jQuery计算器实现了连续计算功能
2014/07/21 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
在JavaScript中调用Java类和接口的方法
2016/09/07 Javascript
JS实现获取word文档内容并输出显示到html页面示例
2018/06/23 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
解决Layui中layer报错的问题
2019/09/03 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
js实现一款简单踩白块小游戏(曾经很火)
2019/12/02 Javascript
Vue为什么要谨慎使用$attrs与$listeners
2020/08/27 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
2020/09/22 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
2018/06/14 Python
Python内存读写操作示例
2018/07/18 Python
Python构建图像分类识别器的方法
2019/01/12 Python
Django使用模板后无法找到静态资源文件问题解决
2019/07/19 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
如何安装并在pycharm使用selenium的方法
2020/04/30 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
python 基于DDT实现数据驱动测试
2021/02/18 Python
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
为世界各地的女性设计和生产时尚服装:ROMWE
2016/09/17 全球购物
暑期社会实践方案
2014/02/05 职场文书
敬老月活动总结
2014/08/28 职场文书
2014年党员干部四风问题自我剖析材料
2014/09/29 职场文书
材料采购员岗位职责
2015/04/03 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书
MySQL为id选择合适的数据类型
2021/06/07 MySQL
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis