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 相关文章推荐
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
Apr 16 Python
python嵌套字典比较值与取值的实现示例
Nov 03 Python
Python中的默认参数实例分析
Jan 29 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Apr 28 Python
Python3用tkinter和PIL实现看图工具
Jun 21 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
Aug 31 Python
python匿名函数用法实例分析
Aug 03 Python
python语言线程标准库threading.local解读总结
Nov 10 Python
浅析Python数字类型和字符串类型的内置方法
Dec 22 Python
python实现信号时域统计特征提取代码
Feb 26 Python
python反爬虫方法的优缺点分析
Nov 25 Python
Python页面加载的等待方式总结
Feb 28 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运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
2019/05/29 PHP
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
jQuery UI 应用不同Theme的办法
2010/09/12 Javascript
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
2015/08/24 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
2016/12/09 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
详解vue.js 开发环境搭建最简单攻略
2017/06/12 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
2018/08/09 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
vue3.0 CLI - 3.2 路由的初级使用教程
2018/09/20 Javascript
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
2019/03/02 NodeJs
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
Python os模块介绍
2014/11/30 Python
Python使用gensim计算文档相似性
2016/04/10 Python
Python冲顶大会 快来答题!
2018/01/17 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
Python远程视频监控程序的实例代码
2019/05/05 Python
Python获取好友地区分布及好友性别分布情况代码详解
2019/07/10 Python
python3图片文件批量重命名处理
2019/10/31 Python
python多线程使用方法实例详解
2019/12/30 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
银行会计职员个人的自我评价
2013/09/29 职场文书
数控机床专业自荐信
2014/05/19 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL