借鉴的别人的思路

http://www.oschina.net/code/snippet_2463131_53711

抓取超级课程表传输的数据

他的传输数据居然是明文的……

现在已经把自己的课表都抓出来了

不过这个也是抓取手机APP数据的思路?

还是值得学习一番的。

//很蠢……

//我干嘛不直接爬学校的教务处呢

  1. #!/usr/local/bin/python2.7
  2. # -*- coding: utf8 -*-
  3. """
  4. 超级课程表话题抓取
  5. """
  6. import urllib2
  7. from cookielib import CookieJar
  8. import json
  9. ''' 读Json数据 '''
  10. def fetch_data(json_data):
  11. data = json_data['data']
  12. timestampLong = data['timestampLong']
  13. messageBO = data['messageBOs']
  14. topicList = []
  15. for each in messageBO:
  16. topicDict = {}
  17. if each.get('content', False):
  18. topicDict['content'] = each['content']
  19. topicDict['schoolName'] = each['schoolName']
  20. topicDict['messageId'] = each['messageId']
  21. topicDict['gender'] = each['studentBO']['gender']
  22. topicDict['time'] = each['issueTime']
  23. print each['schoolName'],each['content']
  24. topicList.append(topicDict)
  25. return timestampLong, topicList
  26. ''' 加载更多 '''
  27. def load(timestamp, headers, url):
  28. headers['Content-Length'] = '159'
  29. loadData = 'timestamp=%s&phoneBrand=Meizu&platform=1&genderType=-1&topicId=19&phoneVersion=16&selectType=3&channel=MXMarket&phoneModel=M040&versionNumber=7.2.1&' % timestamp
  30. req = urllib2.Request(url, loadData, headers)
  31. loadResult = opener.open(req).read()
  32. loginStatus = json.loads(loadResult).get('status', False)
  33. if loginStatus == 1:
  34. print 'load successful!'
  35. timestamp, topicList = fetch_data(json.loads(loadResult))
  36. load(timestamp, headers, url)
  37. else:
  38. print 'load fail'
  39. print loadResult
  40. return False
  41. loginUrl = 'http://120.55.151.61/V2/StudentSkip/loginCheckV4.action'
  42. topicUrl = 'http://120.55.151.61/V2/Treehole/Message/getMessageByTopicIdV3.action'
  43. classUrl = 'http://120.55.151.61/V2/Course/getCourseTableFromSchool3.action'
  44. headers = {
  45. 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
  46. 'User-Agent': 'Dalvik/1.6.0 (Linux; U; Android 4.1.1; M040 Build/JRO03H)',
  47. 'Host': '120.55.151.61',
  48. 'Connection': 'Keep-Alive',
  49. 'Accept-Encoding': 'gzip',
  50. 'Content-Length': '207',
  51. }
  52. ''' ---登录部分--- '''
  53. loginData = 'phoneBrand=Meizu&platform=1&deviceCode=868033014919494&account=4B027B0DFA04DD9D7796FDC3A1282427&phoneVersion=16&password=BC892A42D928A7E026F147FC140C4300&channel=MXMarket&phoneModel=M040&versionNumber=7.2.1&'
  54. cookieJar = CookieJar()
  55. opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))
  56. req = urllib2.Request(loginUrl, loginData, headers)
  57. loginResult = opener.open(req).read()
  58. loginStatus = json.loads(loginResult).get('data', False)
  59. if loginResult:
  60. print 'login successful!'
  61. else:
  62. print 'login fail'
  63. print loginResult
  64. """
  65. ''' ---获取话题--- '''
  66. topicData = 'timestamp=0&phoneBrand=Meizu&platform=1&genderType=-1&topicId=19&phoneVersion=16&selectType=3&channel=MXMarket&phoneModel=M040&versionNumber=7.2.1&'
  67. headers['Content-Length'] = '147'
  68. topicRequest = urllib2.Request(topicUrl, topicData, headers)
  69. topicHtml = opener.open(topicRequest).read()
  70. topicJson = json.loads(topicHtml)
  71. topicStatus = topicJson.get('status', False)
  72. print topicJson
  73. if topicStatus == 1:
  74. print 'fetch topic success!'
  75. timestamp, topicList = fetch_data(topicJson)
  76. load(timestamp, headers, topicUrl)
  77. """
  78. # 这儿是获取课表
  79. ClassData = ' phoneVersion=16&phoneBrand=Meizu&platform=1&parameters=%7B%22crawlType%22%3A0%2C%22hasVerCode%22%3Afalse%2C%22maxCount%22%3A0%2C%22parameterList%22%3A%5B%7B%22key%22%3A%22para1%22%2C%22question%22%3A0%2C%22type%22%3A1%2C%22value%22%3A%2279F07E42A30275BD1D1132BAE11C8408%22%7D%2C%7B%22key%22%3A%22para2%22%2C%22question%22%3A0%2C%22type%22%3A2%2C%22value%22%3A%2276D704007FF11CFD551D1B94662A2D66%22%7D%2C%7B%22key%22%3A%22pama3%22%2C%22question%22%3A0%2C%22type%22%3A3%2C%22value%22%3A%22bks%22%7D%5D%2C%22semester%22%3A%221%22%2C%22startSchoolYear%22%3A%222016%22%2C%22step%22%3A1%2C%22verCodeError%22%3Afalse%7D&channel=MXMarket&phoneModel=M040&versionNumber=7.2.1&'
  80. headers['Content-Length'] = '667'
  81. ClassRequest = urllib2.Request(classUrl, ClassData, headers)
  82. ClassHtml = opener.open(ClassRequest).read()
  83. ClassJson = json.loads(ClassHtml)
  84. ClassStatus = ClassJson.get('status', False)
  85. print ClassJson

python 爬虫 处理超级课程表传输的数据的更多相关文章

  1. Python爬虫教程-18-页面解析和数据提取

    本篇针对的数据是已经存在在页面上的数据,不包括动态生成的数据,今天是对HTML中提取对我们有用的数据,去除无用的数据 Python爬虫教程-18-页面解析和数据提取 结构化数据:先有的结构,再谈数据 ...

  2. Python爬虫:用BeautifulSoup进行NBA数据爬取

    爬虫主要就是要过滤掉网页中没用的信息.抓取网页中实用的信息 一般的爬虫架构为: 在python爬虫之前先要对网页的结构知识有一定的了解.如网页的标签,网页的语言等知识,推荐去W3School: W3s ...

  3. Python爬虫入门教程 43-100 百思不得姐APP数据-手机APP爬虫部分

    1. Python爬虫入门教程 爬取背景 2019年1月10日深夜,打开了百思不得姐APP,想了一下是否可以爬呢?不自觉的安装到了夜神模拟器里面.这个APP还是比较有名和有意思的. 下面是百思不得姐的 ...

  4. Python爬虫:如何爬取分页数据?

    上一篇文章<Python爬虫:爬取人人都是产品经理的数据>中说了爬取单页数据的方法,这篇文章详细解释如何爬取多页数据. 爬取对象: 有融网理财项目列表页[履约中]状态下的前10页数据,地址 ...

  5. 一个月入门Python爬虫,轻松爬取大规模数据

    Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得 ...

  6. Python爬虫爬取百度翻译之数据提取方法json

    工具:Python 3.6.5.PyCharm开发工具.Windows 10 操作系统 说明:本例为实现输入中文翻译为英文的小程序,适合Python爬虫的初学者一起学习,感兴趣的可以做英文翻译为中文的 ...

  7. Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储

    Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...

  8. python爬虫25 | 爬取下来的数据怎么保存? CSV 了解一下

    大家好 我是小帅b 是一个练习时长两年半的练习生 喜欢 唱! 跳! rap! 篮球! 敲代码! 装逼! 不好意思 我又走错片场了 接下来的几篇文章 小帅b将告诉你 如何将你爬取到的数据保存下来 有文本 ...

  9. Python爬虫(九)_非结构化数据与结构化数据

    爬虫的一个重要步骤就是页面解析与数据提取.更多内容请参考:Python学习指南 页面解析与数据提取 实际上爬虫一共就四个主要步骤: 定(要知道你准备在哪个范围或者网站去搜索) 爬(将所有的网站的内容全 ...

随机推荐

  1. linux下的usb抓包方法【转】

    转自:http://blog.chinaunix.net/uid-11848011-id-4508834.html 1.配置内核使能usb monitor: make menuconfig       ...

  2. js对金额浮点数运算精度的处理方案

    浮点数产生的原因 浮点数转二进制,会出现无限循环数,计算机又对无限循环小数进行舍入处理 js弱语言的解决方案 方法一: 指定要保留的小数位数(0.1+0.2).toFixed(1) = 0.3;这个方 ...

  3. Eclipse中各种编码格式及设置

    操作系统:Windows 10(家庭中文版) Eclipse版本:Version: Oxygen.1a Release (4.7.1a) 刚看到一篇文章,里面介绍说Ascii.Unicode是编码,而 ...

  4. http://code52.org/DownmarkerWPF/

    http://code52.org/DownmarkerWPF/ http://kb.cnblogs.com/page/132209/

  5. Python 模块进阶

    import导入模块 1. import 搜索路径 import sys sys.path 例子: In [1]: import sys In [2]: sys.path Out[2]: ['', ' ...

  6. 产看Linux运行时间

    Linux下如何查看系统启动时间和运行时间 1.uptime命令输出:16:11:40 up 59 days, 4:21, 2 users, load average: 0.00, 0.01, 0.0 ...

  7. 简单的TCP接受在转发到客户端的套接口

    //功能:客服端发送tcp包,服务器接受到并打印出来,并将包转换为大写后到客户端//2015.9.10成功 #include <stdio.h>#include <sys/socke ...

  8. python_selenium自动化测试框架

    设计思路 本文整理归纳以往的工作中用到的东西,现汇总成基础测试框架提供分享. 框架采用python3 + selenium3 + PO + yaml + ddt + unittest等技术编写成基础测 ...

  9. Python 让两个print()函数的输出打印在一行内

    1.两个连续的print()函数为什么在输出时内容会分行显示? 解:print()中有两个默认参数 sep 和 end,其中sep是代替分隔符,end是代替末尾的换行符,默认使用‘,’代替空格,且默认 ...

  10. ABP zero 3.2 发布

    v3.2.0 (2017-03-07) Common Tenant based UI customizations (allow tenants to upload custom CSS and lo ...