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 生成不重复的随机数的代码
May 15 Python
高性能web服务器框架Tornado简单实现restful接口及开发实例
Jul 16 Python
10种检测Python程序运行时间、CPU和内存占用的方法
Apr 01 Python
python 排序算法总结及实例详解
Sep 28 Python
pandas数据分组和聚合操作方法
Apr 11 Python
用TensorFlow实现戴明回归算法的示例
May 02 Python
Sanic框架路由用法实例分析
Jul 16 Python
Python2和Python3之间的str处理方式导致乱码的讲解
Jan 03 Python
Pandas中Series和DataFrame的索引实现
Jun 27 Python
使用Python 自动生成 Word 文档的教程
Feb 13 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
Sep 28 Python
10个python爬虫入门实例(小结)
Nov 01 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
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
Laravel 加载第三方类库的方法
2018/04/20 PHP
基于Web标准的UI组件 — 树状菜单(2)
2006/09/18 Javascript
js实现的网页颜色代码表全集
2007/07/17 Javascript
jQuery html()等方法介绍
2009/11/18 Javascript
JQuery中的ready函数冲突的解决方法
2010/05/17 Javascript
用Javascript获取页面元素的具体位置
2013/12/09 Javascript
jquery 实现返回顶部功能
2014/11/17 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
搞定immutable.js详细说明
2016/05/02 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
jquery实现tab键进行选择后enter键触发click行为
2017/03/29 jQuery
详解webpack+angular2开发环境搭建
2017/06/28 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
vue脚手架项目创建步骤详解
2021/03/02 Vue.js
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
Windows下python3.7安装教程
2018/07/31 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
在matplotlib的图中设置中文标签的方法
2018/12/13 Python
python利用7z批量解压rar的实现
2019/08/07 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
英国著名国际平价时尚男装品牌:Topman
2016/08/27 全球购物
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
德国便宜的宠物店:Brekz.de
2020/10/23 全球购物
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
2014年健康教育实施方案
2014/02/17 职场文书
高中军训感言1000字
2014/03/01 职场文书
母亲节感恩活动记录
2014/03/16 职场文书
租赁意向书范本
2014/04/01 职场文书
土建施工员岗位职责
2015/04/11 职场文书
中标通知书
2015/04/17 职场文书
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis