打开chrome的按F12进入,选择network,勾上preserve log(为了保存中间过程),输入上图的用户名密码,点击登陆。
比如POST方法或者查看login.aspx,这个就是我们提交表单的信息了,点进去拖到最下方可以看到form data,
可以看到提交的用户名密码,接下来只需代码模拟登陆的话把提交这个data里的信息就可以了。
下图的,本人学校的登入的用户名密码的表单。
登入进去后,为了爬取成绩需要转到成绩页面,不过不管怎么点击其他页面按键,发现网址始终不变:xxx.xxx.edu.cn/Index.aspx。
这是什么原理,目前还不太懂。不过chrome的network,勾上preserve log(为了保存中间过程),点击成绩查询,又收到2个文件。
cjcx:就是“成绩查询”的缩写,Request URL就是真实的地址。
所以真实的成绩查询地址不是:xxx.xxx.edu.cn/Index.aspx,而是:xxx.xxx.edu.cn/cjgl/xs_cjcx.aspx。
接下来,就需要用到cookie登入,然后正则表达式(各个学校不一样),匹配信息,并写入test.txt文件。
正则表达式,自己看了几个网页粗粗的学了下,没有学到家,可以匹配出所有的成绩,但是还是会匹配出一些垃圾信息出来。
下面就是代码部分:
#encoding=utf-8
import urllib
import urllib2
import cookielib
import re
import string
file_name1=r'C:\Users\112\Desktop\test.txt'
e = open(file_name1,'w+')
#绩点运算
class SDU:
#类的初始化
def __init__(self):
#登录URL
self.loginUrl = 'http://XXX.XXX.edu.cn/login.aspx'
#本学期成绩URL
self.gradeUrl = 'http://XXX.XXX.edu.cn/cjgl/xs_cjcx.aspx'
self.cookies = cookielib.CookieJar()
self.postdata = urllib.urlencode({
'muser':'151100000',
'passwd':'12345678'
})
self.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1)AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11'}
#构建opener
self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookies))
#学分list
self.credit = []
#成绩list
self.grades = []
def getPage(self):
request = urllib2.Request(
url = self.loginUrl,
data = self.postdata,
headers = self.headers)
result = self.opener.open(request)
result = self.opener.open(self.gradeUrl)
#打印登录内容
#print result.read()
page = result.read()
print page
#替换内容
page = page.replace('','')
page = page.replace('','')
#正则匹配
st= re.compile(r'.*?(.*?).*?(.*?).*?(.*?)(.*?)(.*?)(.*?)(.*?)')
myItems3 = re.findall(st,page)
print myItems3
for item3 in myItems3:
for i in range(7):
e.write(item3[i]+' ')
print item3[i]
e.write('\n \n ')
sdu = SDU()
sdu.getPage()
e.close()