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使用mysqldb连接数据库操作方法示例详解
Dec 03 Python
python3使用urllib示例取googletranslate(谷歌翻译)
Jan 23 Python
Python中使用MELIAE分析程序内存占用实例
Feb 18 Python
PyCharm在win10的64位系统安装实例
Nov 26 Python
python操作excel的方法
Aug 16 Python
对Python通过pypyodbc访问Access数据库的方法详解
Oct 27 Python
python如何制作缩略图
Apr 30 Python
python如何求100以内的素数
May 27 Python
关于tf.matmul() 和tf.multiply() 的区别说明
Jun 18 Python
pandas to_excel 添加颜色操作
Jul 14 Python
Python descriptor(描述符)的实现
Nov 15 Python
基于Python的EasyGUI学习实践
May 07 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
PHP foreach循环使用详解与实例代码
2010/05/08 PHP
php下安装配置fckeditor编辑器的方法
2011/03/02 PHP
PHP 获取文件路径(灵活应用__FILE__)
2013/02/15 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
2013/08/31 PHP
PHP实现微信公众平台音乐点播
2014/03/20 PHP
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
javascript中检测变量的类型的代码
2010/12/28 Javascript
用JS控制回车事件的代码
2011/02/20 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
2013/12/08 Javascript
工作中比较实用的JavaScript验证和数据处理的干货(经典)
2016/08/03 Javascript
JavaScript 数组的进化与性能分析
2017/09/18 Javascript
使用JS实现导航切换时高亮显示的示例讲解
2018/08/22 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
利用Vconsole和Fillder进行移动端抓包调试方法
2019/03/05 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
Vue.js中的组件系统
2019/05/30 Javascript
Python深入学习之对象的属性
2014/08/31 Python
Python threading多线程编程实例
2014/09/18 Python
python用来获得图片exif信息的库实例分析
2015/03/16 Python
Python实现繁体中文与简体中文相互转换的方法示例
2018/12/18 Python
python paramiko远程服务器终端操作过程解析
2019/12/14 Python
virtualenv介绍及简明教程
2020/06/23 Python
python3 re返回形式总结
2020/11/20 Python
项目开发计划书
2014/01/09 职场文书
金融行业职业生涯规划范文
2014/01/17 职场文书
家长给孩子的表扬信
2014/01/17 职场文书
教师绩效考核方案
2014/01/21 职场文书
反邪教标语
2014/06/23 职场文书
动画设计系毕业生求职信
2014/07/15 职场文书
房地产端午节活动方案
2014/08/24 职场文书
2015年财政局工作总结
2015/05/21 职场文书
2016高校自主招生自荐信范文
2016/01/28 职场文书
MySQL中的隐藏列的具体查看
2021/09/04 MySQL