# -*- coding: cp936 -*-
#计算北邮教务GPA程序
#by JerryFang
#2013.11.13

import urllib2
import re
import cookielib
from urllib import urlencode
import sys,codecs

def CalcGPA():
    print '''
                    红领巾(RedCraft)--北邮GPA计算器
         1 计算北邮URP教务系统GPA(仅限内网登录:登录端口为教务系统1)
         2 免修成绩不予计算
         3 算法为:sum(学分*成绩)/sum(学分)
         4 用户名输错了就费了,这个错误还不会写
                        by JerryFang
    '''
    uname = raw_input('请输入用户名\n')
    pwd = raw_input('请输入密码\n')

# cookie
    cj = cookielib.LWPCookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    urllib2.install_opener(opener)

# Login登录POST包中获得
    user_data = {'type':'sso',
                 'zjh':uname,
                 'mm':pwd
                }
    url_data = urlencode(user_data)

#使用firefox+HttpFox抓包查看得到登录url
    req = urllib2.Request(
                          url = 'http://211.68.70.198:8011/jwLoginAction.do',
                          data = url_data
                         )

result = opener.open(req)

#抓包获得成绩url
    result = opener.open('http://211.68.70.198:8011/gradeLnAllAction.do?type=ln&oper=fainfo&fajhh=204')

#WARNING:decode将网页的编码转化为unicode,网页编码在html头部可以看到
    cont = result.read().decode('gb2312')

#密码错误处理
    if cont.find('''setTimeout('init()',0)''') == 0:
        print '输入用户名密码错误'
        return 0

#正则式挖取有用内容
    a = re.compile(u'''<tr.+?>(.+?)</tr>''', re.DOTALL)
    b = re.compile(u'''<td align="center">(.+?)</td>''', re.DOTALL)
    c = re.compile(u'''<p align="center">(.+?)&nbsp;</P>''', re.DOTALL)

data = []

myItems = a.findall(cont, re.S)  
    for item in myItems:  
        x = b.findall(item, re.S)
        for i in x:
            #WARNING:如果不用strip正则式无法匹配出c正则式(疑问??)
            j = i.strip()
            ma = c.match(j)
            #将信息统一为unicode形式
            if ma:
                tmp =  c.findall(j)
                dataItem = tmp[0]
            else:
                dataItem =  j
            #WARNING:将unicode的数据转化为ascii(str类)存储
            data.append((dataItem).encode('gbk'))

l = len(data)
    sumCredit = 0
    sumGPA = 0
    for i in range(l/6):
        #处理免修的特殊情况
        if data[i*6+5] == '免修':
            continue
        credit = float(data[i*6+3])
        grade =  float(data[i*6+5])
        sumGPA += credit*grade
        sumCredit += credit

print '您的平均成绩为'
    print sumGPA/sumCredit
    
CalcGPA()
raw_input('按任意键退出')

##爬虫教程+扒山大教务实战:http://blog.csdn.net/pleasecallmewhy/article/details/8934726
##py2exe:http://www.cnblogs.com/jans2002/archive/2006/09/30/519393.html

python爬虫实例—获取北邮教务GPA相关推荐

  1. python爬虫实例-记录一次简单的Python爬虫实例

    本次的这篇文章主要是和大家分享了一篇关于记录一次简单的Python爬虫实例 ,有需要的小伙伴可以看一下. 主要流程分为: 爬取.整理.存储 1.其中用到几个包,包括 requests 用于向网站发送请 ...

  2. python爬虫进阶案例,Python进阶(二十)-Python爬虫实例讲解

    #Python进阶(二十)-Python爬虫实例讲解 本篇博文主要讲解Python爬虫实例,重点包括爬虫技术架构,组成爬虫的关键模块:URL管理器.HTML下载器和HTML解析器. ##爬虫简单架构 ...

  3. python爬虫实例教程之豆瓣电影排行榜--python爬虫requests库

    我们通过requests库进行了简单的网页采集和百度翻译的操作,这一节课我们继续进行案例的讲解–python爬虫实例教程之豆瓣电影排行榜,这次的案例与上节课案例相似,同样会涉及到JSON模块,异步加载 ...

  4. Python爬虫实例 wallhaven网站高清壁纸爬取。

    文章目录 Python爬虫实例 wallhaven网站高清壁纸爬取 一.数据请求 1.分析网页源码 2.全网页获取 二.数据处理 1.提取原图所在网页链接 2.获取高清图片地址及title 三.下载图 ...

  5. python爬虫实例之——多线程爬取小说

    之前写过一篇爬取小说的博客,但是单线程爬取速度太慢了,之前爬取一部小说花了700多秒,1秒两章的速度有点让人难以接受. 所以弄了个多线程的爬虫. 这次的思路和之前的不一样,之前是一章一章的爬,每爬一章 ...

  6. 饱暖思淫欲之美女图片的Python爬虫实例(二)

    美女图片的Python爬虫实例:面向服务器版 ==该爬虫面向成年人且有一定的自控能力(涉及部分性感图片,仅用于爬虫实例研究)== 前言 初始教程 存在问题 解决思路 目标 实现步骤 硬件配置 服务器信 ...

  7. Python爬虫实例(1)--requests的应用

    Python爬虫实例(1) 我们在接下来的爬虫实例(1)里面将逐步的循序渐进的介绍爬虫的各个步骤. 已及时用到的工具,以及具体情况下的用法. 我们的任务是这样的: 爬取<修真聊天群>小说的 ...

  8. Python爬虫实例-爬取豆瓣电影Top250

    这是本人Python爬虫实例的第二个实例,不过想来好像没有很大的难度所以适合当做新手入门的第一个爬虫.放在这里供大家参考. 本次实例爬取的网站为豆瓣电影Top250,使用到的第三方库有urllib,B ...

  9. AJAX教程美食滤镜,Python爬虫实例——爬取美团美食数据

    1.分析美团美食网页的url参数构成 1)搜索要点 美团美食,地址:北京,搜索关键词:火锅 2)爬取的url https://bj.meituan.com/s/%E7%81%AB%E9%94%85/ ...

最新文章

  1. 查询oracle数据库adg的模式,Oracle11g ADG配置
  2. java全面的计算器代码_Java实现计算器的代码
  3. 转:Web Service入门开发简单例子--很详尽
  4. 公司电脑监控软件_公司电脑监控软件,如何限制公司电脑网络游戏
  5. MOSS/Sharepoint 如何更改一台已经安装了SharePoint的服务器名称
  6. Hadoop伪分布式配置和搭建,hadoop单机安装,wordcount实例测试,hadoop安装java目录怎么找,问题及问题解决方法
  7. centos mysql无法启动 sock_linux下mysql无法启动的解决方法
  8. #include_next
  9. sql server 锁定_关于锁定SQL Server的全部
  10. 搜索引擎优化的用乐云seo_搜索引擎优化SEO
  11. dmx512 java_DMX512控制协议及其实现
  12. 敏捷开发以及极限编程与SCRUM的特点和区别
  13. 高通平台添加自己的product后com.qualcomm.qti.tetherservice不停crash
  14. Matlab中return语句
  15. 使用蒲公英组网实现企业微信访问局域网数据
  16. SPEC 2000使用的详细介绍(1)
  17. 拆解了20个企业微信社群的我, 发现【社群营销】最好的方法应该是这样!
  18. Beautifulsoup模块
  19. vue中实现动画效果--三种方式
  20. PPT怎么转换成PDF?有哪些转换方法?

热门文章

  1. 计算机专业买什么商务本好,单位购买什么笔记本的比较多?各位能不能说来听听?华硕笔记本电脑哪个系列性价好,商务办公用?...
  2. 操作系统期末复习重点
  3. 通信工程交换传输实习报告
  4. 大红喜庆版UI猜灯谜又叫猜字谜微信小程序源码下载
  5. 2021-2022学年广州市第二中学九年级第一学期12月考英语试题
  6. CCRenderTexture画点出现十字架歪解
  7. “SISTERS姐妹”双个展在南京W艺术空间举办
  8. 苹果手机屏幕尺寸_苹果,小米在折叠屏手机上曝光新专利,TCL展示卷轴式屏幕手机...
  9. IDNA-ABF: DNA甲基化可解释预测的多尺度深度生物语言学习模型
  10. roguelike2d 摄像机参数设置