抓取超级课程表话题数据。
博文:http://my.oschina.net/jhao104/blog/606922
#!/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)
    data = load(timestamp, headers, topicUrl)
    if data:
        timestamp, topicList = fetch_data(data)


标签:

Python爬虫-抓取手机APP数据的更多相关文章

  1. python中温度单位转换的实例方法

    温度有摄氏度和华氏度两个单位,我们通常使用的是摄氏度,对于转换成华氏度,很多小伙伴记不住公式。作为万能的计算机,它是可以帮助我们解决温度单位转换的问题。本文主要演示python中进行温度单位转换的代码过程,具体请看本文。一、问题温度有摄氏度(Celsius)和华氏度(Fabrenheit)两个不同的......

  2. Python优化机制:常量折叠

    英文:https://arpitbhayani.me/blogs/constant-folding-python作者:arprit译者:豌豆花下猫(“Python猫”公众号作者)声明:本翻译是出于交流学习的目的,基于 CC BY-NC-SA 4.0 授权协议。为便于阅读,内容略有改动。每种编程语言为......

  3. python 进制转换 int、bin、oct、hex

    原理十进制转n进制都可以使用倒除法:对十进制进行除n的运算,直到商为0为止,然后将各个步骤中得到的余数倒着写出来.n进制转十进制:(例子:二进制转十进制)101001 => 2^5 + 2^3 + 1 = 32 + 8 + 1 = 4110111 => 2^4 + 2^2 + 2 + 1......

  4. 详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库

    获取要爬取的URL爬虫前期工作用Pycharm打开项目开始写爬虫文件字段文件items# Define here the models for your scraped items## See documentation in:# https://docs.scrapy.org/en/latest/......

  5. 使用bandit对目标python代码进行安全函数扫描

    本文介绍了python安全危险函数扫描工具bandit的数种使用方法与技巧,同时也分析了bandit在实际项目中的性能表现,给予了读者是否在python开发项目中引入bandit的启发思考。技术背景在一些对python开源库代码的安全扫描中,我们有可能需要分析库中所使用到的函数是否会对代码的执行环境......

  6. Python基础(中篇)

    数据类型的常用方法,条件语句,循环语句。本篇文章主要内容:数据类型的常用方法,条件语句,循环语句。在开始正篇之前我们先来看看上一篇留下的题目。题目:定义一个字典a,有两个键值对:一个键值对key是可乐,value是18;另一个键值对key是python,value是列表形式的1,2,3,4,5。答案......

  7. 使用Python+Appuim 清理微信的方法

    使用 Appium安装一下 Python 用到的模块pip install Appium-Python-Client获取好友列表在 Pycharm 中配置一下启动环境desired_capabilities = {'platformName': 'Android', # 操作系统'deviceNam......

  8. 解读Python的文件读写

    前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。PS:如有需要Python学习资料的小伙伴可以加下Python快乐交流群:11362015451.概述Python中内置了文件读写的功能核心:读写文件其实请求操作系统打开一个文件对象【文件描述符】......

  9. 利用python为PostgreSQL的表自动添加分区

    PostgreSQL引进“分区”表特性,解放了之前采用“表继承”+“触发器”来实现分区表的繁琐、低效。而添加分区,都是手动执行SQL。 演示目的:利用python来为PostgreSQL的表自动添加分区。python版本:python3+ pip3 install psycopg2 一......

  10. Python 日志打印之logging.getLogger源码分析

    日志打印之logging.getLogger源码分析日志打印之logging.getLogger源码分析By:授客 QQ:1033553122 #实践环境WIN 10Python 3.6.5#函数说明logging.getLogger(name=None)getLogger函数位于logging/_......

随机推荐

  1. javascript脚本何时会被执行

    javascript脚本可以嵌入在html内的任意地方,但它何时被调用呢?当浏览器打开HTML文件后,会直接运行不是声明函数的脚本或通过事件调用脚本函数,下面分析这几种情况。1.浏览器在打开页面时执行脚本当浏览器打开一个HTML文件时,它会从头开始解释整个文件,包括html标签和脚本。如果脚本中有可......

  2. Python PyQt5中弹出子窗口解决子窗口一闪而过的问题

    方式一:槽函数中创建子窗口对象,赋值到普通变量在主窗口添加按钮,并把按钮信号关联槽,在槽函数中创建子窗口对象赋值到普通变量,并调用其 show 方法。from PyQt5.QtWidgets import *import sysclass Main(QMainWindow):def __init......

  3. Python 有可能删除 GIL 吗?

    我们知道,在 CPython 中,有一个全局解释器锁,英文叫 global interpreter lock,简称 GIL,是一个互斥锁,用来保护 Python 世界里的对象,防止同一时刻多个线程执行 Python 的字节码,从而确保线程安全,这导致了 Python 的线程无法利用多核 CPU 的优......

  4. css3实现背景渐变

    #grad {background: -webkit-linear-gradient(left,rgba(255,0,0,0),rgba(255,0,0,1)); /* Safari 5.1 - 6 */background: -o-linear-gradient(right,rgba(255,0,......

  5. 分别使用 Python 和 Math.Net 调用优化算法

    1. Rosenbrock 函数在数学最优化中,Rosenbrock 函数是一个用来测试最优化算法性能的非凸函数,由Howard Harry Rosenbrock 在 1960 年提出 。也称为 Rosenbrock 山谷或 Rosenbrock 香蕉函数,也简称为香蕉函数。Rosenbrock ......

  6. MySql8 WITH RECURSIVE递归查询父子集的方法

    背景开发过程中遇到类似评论的功能是,需要时用查询所有评论的子集。不同数据库中实现方式也不同,本文使用Mysql数据库,版本为8.0Oracle数据库中可使用START [Param] CONNECT BY PRIORMysql 中需要使用 WITH RECURSIVE需求找到name为张三的孩子和孙......

  7. Python 元类

    本文通过Python实现单例模式一步步理解元类。印象中,是在创建单例模式时知道可以用到元类(metaclass),但始终对其了解的不是很透彻,很多人也都说元类是Python中较难理解的概念之一,于是找来几本书,希望可以找到答案,本文以Python3为例。本文参考:《人人都懂设计模式》《Python ......

  8. 详解如何使用Pytest进行自动化测试

    为什么需要自动化测试自动化测试有很多优点,但这里有3个主要的点可重用性:不需要总是编写新的脚本,除非必要,即使是新的操作系统版本也不需要编写脚本。可靠性:人容易出错,机器不太可能。当运行不能跳过的重复步骤/测试时,速度会更快。全天运行:您可以在任何时间或远程启动测试。夜间运行正在测试你的软件,即使是......

  9. MySQL创建数据库并支持中文字符的操作方法

    我们首先看一下MySQL官方文档:5.7CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name[create_option] ...create_option: [DEFAULT] {CHARACTER SET [=] charset_name| COL......

  10. Neo4j 导入 Nebula Graph 的实践总结

    主要介绍如何通过官方 ETL 工具 Exchange 将业务线上数据从 Neo4j 直接导入到 Nebula Graph 以及在导入过程中遇到的问题和优化方法。摘要: 主要介绍如何通过官方 ETL 工具 Exchange 将业务线上数据从 Neo4j 直接导入到 Nebula Graph 以及在导入......