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 相关文章推荐
在Linux下调试Python代码的各种方法
Apr 17 Python
python实现根据ip地址反向查找主机名称的方法
Apr 29 Python
python在不同层级目录import模块的方法
Jan 31 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
May 25 Python
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
python实现飞机大战游戏
Oct 26 Python
Python中print和return的作用及区别解析
May 05 Python
Python学习笔记之函数的定义和作用域实例详解
Aug 13 Python
Python整数与Numpy数据溢出问题解决
Sep 11 Python
Python3 获取文件属性的方式(时间、大小等)
Mar 12 Python
使用Python实现批量ping操作方法
May 06 Python
如何搭建pytorch环境的方法步骤
May 06 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采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
php获取textarea的值并处理回车换行的方法
2014/10/20 PHP
php输出控制函数和输出函数生成静态页面
2019/06/27 PHP
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
jQuery对象[0]是什么含义?
2010/07/31 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
使用D3.js制作图表详解
2017/08/13 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
[原创]微信小程序获取网络类型的方法示例
2019/03/01 Javascript
vue项目前端埋点的实现
2019/03/06 Javascript
利用d3.js实现蜂巢图表带动画效果
2019/09/03 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
python转换字符串为摩尔斯电码的方法
2015/07/06 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
Python弹出输入框并获取输入值的实例
2019/06/18 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
娇韵诗加拿大官网:Clarins加拿大
2017/11/20 全球购物
英国在线药房和在线药剂师:Chemist 4 U
2020/01/05 全球购物
编辑个人求职信范文
2013/09/21 职场文书
会计专业毕业生推荐信
2013/11/05 职场文书
学校食堂采购员岗位职责
2013/12/05 职场文书
建材业务员岗位职责
2013/12/08 职场文书
超市端午节活动方案
2014/01/23 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
本科生求职信
2014/06/17 职场文书
文明班级申报材料
2014/12/24 职场文书
自定义函数实现单词排序并运用于PostgreSQL(实现代码)
2021/04/22 PostgreSQL
Python中zipfile压缩包模块的使用
2021/05/14 Python
SpringBoot2零基础到精通之数据与页面响应
2022/03/22 Java/Android
DE1103使用报告
2022/04/05 无线电
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS