爬了这么久的教务处,终于还是绕过了千山万水登进来了。 这段时间准备期末考,忙,好久不更博。 年终总结也没有写。 是时候开更啦!
1、init():两个URL分别为用抓包软件获取的实际登录网址和实际提交账号密码的网址。 2、login():用抓包软件获取的用Chrome浏览器登录教务处的head报文,login()为模拟登录教务处的所需信息。 3、Print():将登录进去的课程表HTML网页打印出来。 4、使用前请确认安装BeautifulSoup模块。请修改里面的学号id和password再进行运行。 5、后续将从HTML网页中提取出有用的信息。 6、运行login()后便可以登录进教务处系统,修改Print()中的URL即可完成不同信息的获取,比如换成成绩网页的URL、教务通知的URL等等。
#Python35 爬虫 西电 研究生教务处 课表
#肖洒 2017/1/19 V1.0
#请替换id和password再进行使用
# -*-encoding:utf-8-*-
# coding=utf-8
__author__ = 'ysc'
import requests
import csv
from bs4 import BeautifulSoup
class ScrapeXd:
def __init__(self, auth_url=None, log_url=None):
if not auth_url:
self.auth_url = "http://ids.xidian.edu.cn/authserver/login?service=http%3A%2F%2Fjwxt.xidian.edu.cn%2Fcaslogin.jsp"
self.log_url = "http://jwxt.xidian.edu.cn/caslogin.jsp"
else:
self.auth_url = auth_url
self.log_url = log_url
self.session = requests.Session()
def login(self, id='XXXXXXXXXX', password='XXXXXX'):
r = self.session.get(self.auth_url)
data = r.text
bsObj = BeautifulSoup(data, "html.parser")
lt_value = bsObj.find(attrs={"name": "lt"})['value']
exe_value = bsObj.find(attrs={"name": "execution"})['value']
params = {'username': id, 'password': password,
"submit": "", "lt": lt_value, "execution": exe_value,
"_eventId": "submit", "rmShown": '1'}
headers = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",
'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept-Encoding": "gzip, deflate",
"Referer": "http://ids.xidian.edu.cn/authserver/login?service=http%3A%2F%2Fjwxt.xidian.edu.cn%2Fcaslogin.jsp",
"Content-Type": "application/x-www-form-urlencoded"}
s = self.session.post(self.auth_url, data=params, headers=headers)
s = self.session.get(self.log_url)
def Print(self):
grade_page = self.session.get("http://yjsxt.xidian.edu.cn/eduadmin/findCaresultByStudentAction.do")
bsObj2 = BeautifulSoup(grade_page.text, "html.parser")
print(bsObj2)
if __name__ == '__main__':
# 初始化爬虫对象
sx = ScrapeXd()
# 登录(在此处传入正确的个人学号与密码信息)
sx.login(id='XXXXXXXXXX', password='XXXXXX')
sx.Print()