您的位置:首页 > 编程语言 > Python开发

python爬虫获取郑大教务在线成绩数据

2016-02-25 10:37 666 查看

python爬虫获取郑大教务在线成绩数据

话不多说,先上代码。

# -*- coding: cp936-*-
#! /usr/bin/env python
#---------------------------------------
#   程序:郑州大学教务在线数据获取
#   版本:0.5
#   作者:陆嵩&潘凎
#   日期:2016-2-20
#   语言:Python 2.7
#   操作:输入你的年级、学号和密码
#   功能:将你每一学期的成绩打包txt存储到本地。
#---------------------------------------
import urllib
import urllib2
import re
from bs4 import BeautifulSoup

#初始化------------------------------------
grade='2013'
sno='20132120215'
password='********'
#-----------------------------------------

#post数据&登录------------------------------
def post():
url = 'http://jw.zzu.edu.cn/scripts/qscore.dll/search'
values = {'nianji': grade,
'xuehao': sno,
'mima'  : password}
data = urllib.urlencode(values)
req = urllib2.Request(url,data)
response = urllib2.urlopen(req)
the_page = response.read()
response.close()
return the_page
#-----------------------------------------

#获取各学期网页源码---------------------------
def pages_get(the_page):
urltail_format=re.compile('(?<=userid\=)[A-Z\d]+(?="\>)')
urltails=urltail_format.findall(the_page)
pages=[]
for i in range(0,len(urltails)-1):
term_url='http://jw.zzu.edu.cn/scripts/qscore.dll/search?userid='+urltails[i]
term_page = urllib.urlopen(term_url)
pages.append(term_page.read())
term_page.close()
pages.append(the_page)
return pages
#-----------------------------------------

#从网页中抓取所需数据-------------------------
def data_collection(page):
soup = BeautifulSoup(page,from_encoding="cp936")
scores=str(soup.table)
r_subject = re.compile('(?<="40%"\>).*?(?=\<\/td\>)')
r_type = re.compile('(?<="17%"\>).*?(?=\<\/td\>)')
r_others = re.compile('(?<="15%"\>).*?(?=\<\/td\>)')
subjects = r_subject.findall(scores)
types = r_type.findall(scores)
others = r_others.findall(scores)
length = len(subjects)
csv = []
for i in range(0,length):
info = subjects[i] +','+ types[i] +','+ others[3*i] +','+ others[1+3*i] +','+ others[2+3*i] +'\n'
csv.append(info)
return csv
#-----------------------------------------

#数据的保存---------------------------------
def data_save(data,file_name):
file_object = open('D:\\'+file_name, 'w+')
file_object.writelines(data)
file_object.close()
#-----------------------------------------

##---------------主程序—--------------------
if __name__ == '__main__':
print u"""#---------------------------------------
#   程序:郑州大学教务在线成绩数据获取
#   版本:0.5
#   作者:陆嵩
#   日期:2016-2-20
#   语言:Python 2.7
#   操作:输入你的年级、学号和密码
#   功能:将你每一学期的成绩打包txt存储到本地。
#---------------------------------------
"""
the_page=post()
pages=pages_get(the_page)
for i in range(0,len(pages)):
print u'获取第'+str(i+1)+u'学期数据中...'
data=data_collection(pages[i])
file_name='第'+str(i+1)+'学期.txt'
data_save(data,file_name)
print u'完成!数据保存D盘,请注意查看。'
#-------------------------------------------


程序浅显易懂,就不多说了。

需要事前先安装好BeautifulSoup模块。

初始化部分分别输入你的账号密码。

此程序仅适合郑州大学教务在线。若您做一个自己学校的,需要对程序做小改动。主要是在post和pages_get模块。当然,有些学校还要求验证码,网上有很多参考。

for i in range(0,5)
则i的取值为0,1,2,3,4而不包括5。

if __name__ == '__main__':
的作用是说明若在当前程序下运行而不是调用,则执行以下代码。

更多内容,参考链接1链接2链接3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: