首页 » 技术分享 » 使用Python2.7登录江苏大学信息门户并爬取成绩

使用Python2.7登录江苏大学信息门户并爬取成绩

 

        这是一次Python课的作业,老师讲的不多,自己琢磨的很辛苦,希望大家可以少走弯路,本代码使用python2.7运行通过,截止2018.5.13可以正常运行。

同时感谢HYD同学在验证码方面的帮助!

以下为代码:

# coding:utf-8
__author__ = 'Read Air'

import urllib2,cookielib
import urllib
import cStringIO,re
import requests
from PIL import Image
import xlwt
from datetime import datetime
import os

cookie=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
opener.addheaders.append(('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; \
rv:11.0) like Gecko Core/1.63.5221.400 QQBrowser/10.0.1125.400'))

s=requests.Session()

opener.open(urllib2.Request('http://my.ujs.edu.cn/'))
imgurl='http://my.ujs.edu.cn/captchaGenerate.portal'
user=raw_input("学号")
pwd=raw_input("密码")

res=opener.open(urllib2.Request(imgurl))
tempIm=cStringIO.StringIO(res.read())
im=Image.open(tempIm)
im.show()
yzm=raw_input("验证码")
postdata=urllib.urlencode({
    'Login.Token1':user,
    'Login.Token2':pwd,
    'captchaField':yzm,
    'goto:http':'//my.ujs.edu.cn/loginSuccess.portal',
    'gotoOnFail:http':'//my.ujs.edu.cn/loginFailure.portal'
    })
req=urllib2.Request(
    url='http://my.ujs.edu.cn/userPasswordValidate.portal',
    data=postdata
    )
result=opener.open(req)
result_url=opener.open(urllib2.Request('http://my.ujs.edu.cn/index.portal?.pn=p2365_p2536'))
content = result_url.read()

# 实例化一个Workbook()对象(即excel文件)
wbk = xlwt.Workbook(encoding='utf-8')
# 新建一个名为Sheet1的excel sheet。此处的cell_overwrite_ok =True是为了能对同一个单元格重复操作。
sheet = wbk.add_sheet('Sheet1', cell_overwrite_ok=True)
# 获取当前日期,得到一个datetime对象如:(2016, 8, 9, 23, 12, 23, 424000)
today = datetime.today()
# 将获取到的datetime对象仅取日期如:2016-8-9
today_date = datetime.date(today)

name = "xyh"

i = ""
j = ""

x=0
y=0
# 表格头
re_law = "<th>(.*?)</th>"
gradelist = re.findall(re_law,content,re.S)# 包括换行符在内的任意字符
for i in gradelist:
    sheet.write(x, y, i)
    y += 1
    if (y>=11):
        y=0
        x+=1

#表格内容
re_law = "<td>(.*?)</td>"

gradelist = re.findall(re_law,content,re.S)# 包括换行符在内的任意字符
for i in gradelist:
    sheet.write(x, y, i)
    y += 1
    if (y>=11):
        y=0
        x+=1

# 以传递的name+当前日期作为excel名称保存。
wbk.save(name + str(today_date) + '.xls')

print "File saved at"+ os.getcwd() + "\\" + name + str(today_date) + '.xls'

转载自原文链接, 如需删除请联系管理员。

原文链接:使用Python2.7登录江苏大学信息门户并爬取成绩,转载请注明来源!

0