|
楼主 |
发表于 2016-7-21 23:30:24
|
显示全部楼层
还是没看懂大神的代码,我把我的代码贴上来,我想把课程名 学分 成绩 形式打印出来,麻烦大神看看。
# -*- coding: utf-8 -*-
#---------------------------------------
# 语言:Python 2.7
# 操作:输入学号和密码
# 功能:输出成绩的加权平均值也就是绩点
#---------------------------------------
import urllib
import urllib2
import cookielib
import re
class SDU_Spider:
# 申明相关的属性
def __init__(self):
self.loginUrl = 'http://202.203.225.17/pyxx/login.aspx' # 登录的url
self.resultUrl = 'http://202.203.225.17/pyxx/grgl/xskccjcx.aspx' # 显示成绩的url
self.cookieJar = cookielib.CookieJar() # 初始化一个CookieJar来处理Cookie的信息
#需要POST的数据#
self.postdata=urllib.urlencode({
'__VIEWSTATE':'/wEPDwUENTM4MWQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgIFEmN0bDAwJEltYWdlQnV0dG9uMQUSY3RsMDAkSW1hZ2VCdXR0b24yIMtQ7tgUkLJYzCijVsRRDET9gpV7f7aqkxB7Tj7/Hog=',
'ctl00$txtusername':'',
'ctl00$txtpassword':'',
'ctl00$txtyzm':'4460',
'ctl00$ImageButton1.x':'0',
'ctl00$ImageButton1.y':'0',
})
self.weights = [] #存储权重,也就是学分
self.points = [] #存储分数,也就是成绩
self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookieJar))
def sdu_init(self):
# 初始化链接并且获取cookie
myRequest = urllib2.Request(url = self.loginUrl,data = self.postdata) # 自定义一个请求
result = self.opener.open(myRequest) # 访问登录页面,获取到必须的cookie的值
result = self.opener.open(self.resultUrl) # 访问成绩页面,获得成绩的数据
# 打印返回的内容
#print result.read()
self.deal_data(result.read().decode('utf-8'))
self.calculate_date();
# 将内容从页面代码中抠出来
def deal_data(self,myPage):
myItems = re.findall(r'</tr><tr class="GridViewRowStyle"><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td>',myPage,re.S|re.M|re.X) #获取到学分
print myItems
'''
findall(string[, pos[, endpos]]) | re.findall(pattern, string[, flags]): 搜索string,
以列表形式返回全部能匹配的子串。其中RE的常见参数包括:
re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法)
re.M(re.MULTILINE): 多行模式,改变'^'和'$'的行为
re.S(re.DOTALL): 点任意匹配模式,改变'.'的行为
'''
for item in myItems:
self.weights.append(item[0].encode('utf-8'))
self.points.append(item[1].encode('utf-8'))
#计算绩点,如果成绩还没出来,或者成绩是优秀良好,就不运算该成绩
def calculate_date(self):
point = 0.0
weight = 0.1
for i in range(len(self.points)):
if(self.points.isdigit()):
point += string.atof(self.points)*string.atof(self.weights)
weight += string.atof(self.weights)
print point,weight
#调用
mySpider = SDU_Spider()
mySpider.sdu_init()
|
|