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 (1)
Oct 31 Python
Python 面向对象 成员的访问约束
Dec 23 Python
python实现进程间通信简单实例
Jul 23 Python
Python可变参数函数用法实例
Jul 07 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
Jun 26 Python
python 接收处理外带的参数方法
Dec 03 Python
Python 实现子类获取父类的类成员方法
Jan 11 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
Jan 30 Python
Python实现的对一个数进行因式分解操作示例
Jun 27 Python
python利用paramiko实现交换机巡检的示例
Sep 22 Python
selenium如何定位span元素的实现
Jan 13 Python
pandas中对文本类型数据的处理小结
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
php列出一个目录下的所有文件的代码
2012/10/09 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
PHP安全下载文件的方法
2016/04/07 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
基于PHP实现邮箱验证激活过程详解
2020/10/28 PHP
一段好玩的JavaScript代码
2006/12/01 Javascript
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
jquery ajax修改全局变量示例代码
2013/11/08 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
2015/02/25 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
js实现精确到秒的日期选择器完整实例
2016/04/30 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
python实现根据图标提取分类应用程序实例
2014/09/28 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
python实现对指定输入的字符串逆序输出的6种方法
2018/04/26 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
Python之Class&Object用法详解
2019/12/25 Python
python3.7调试的实例方法
2020/07/21 Python
详解Python 中的容器 collections
2020/08/17 Python
美国著名的婴儿学步鞋老品牌:Robeez
2016/08/20 全球购物
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
新员工培训个人的自我评价
2013/10/09 职场文书
大学生预备党员自我评价分享
2013/11/16 职场文书
幼儿园实习自我鉴定
2013/12/15 职场文书
房屋买卖协议书
2014/04/10 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
让子弹飞观后感
2015/06/11 职场文书
优秀团员主要事迹范文
2015/11/05 职场文书