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
相关文章推荐
- 在Windows 操作系统上 搭建 Python 运行环境
- Python 第六篇(下):面向对象编程高级篇
- 利用python进行数据分析之数据规整化
- Python启航
- K-近邻算法python实现
- 尝试在PYTHON中调用StanfordNLP,具体代码如下
- Python压缩多个属于不同驱动器的文件夹至同一个zip文件
- Ubuntu下python开发环境安装
- Python 画图
- 12步教你理解Python装饰器
- python 警告:simplify chained comparison
- 如何使用pyQT做pythonGUI界面?
- 如何将python程序封装成exe可执行文件
- 笨办法学python_学习笔记1
- python(3)-深浅拷贝
- python(3)-队列
- 12步教你理解Python装饰器
- python 学习常用链接
- python arg parse
- Python与机器学习(二):Windows下科学计算环境搭建