一
想到马上就要毕业了,以后就再也登录不了校园网了,干脆就把之前爬虫的校园网登录方法写下来,不过学校的登录验证方法会修改,记得16年爬的时候还需要填写验证码的,17年干脆就取消了验证码,不过在爬取其他内容的时候需要修改cookie的内容。
希望有缘看到这篇文章的校友,如果在学习爬虫之初想爬取校园网,提供帮助
步骤
-
首先当然是打开登录页面
登录界面.png -
用chrome检查登录时的内容,登录是post的方法,登录的表单内容也很简单,id是账号,pwd是密码,第一个state隐藏在源代码中,很容易就能提取
登录表单.png
#coding=utf-8
import requests
import re
import json
import os
r=requests.Session()
url=r'http://ecard.zuel.edu.cn/Login.aspx'
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36",
"Referer":"http://ecard.zuel.edu.cn/Login.aspx",
"Origin":"http://ecard.zuel.edu.cn",
"Host":"ecard.zuel.edu.cn",
}
def zhengze(patt,htm):
hh=re.compile(patt)
ll=re.findall(hh,htm)
return ll
html=r.get(url,headers=headers)
first_con=html.content.decode('utf-8')
pattern=r'id="__VIEWSTATE" value="(.+?)"'
#获取了__VIEWSTATE的值
code=zhengze(pattern,first_con)[0]
data={
'__VIEWSTATE':code,
'loginType':'sno',
'loginId':'**',
'loginPwd':'**'
}
sec_con=r.post(url,headers=headers,data=data)
-
登录之后就显示如下界面了,但头像并不是直接藏在源代码里,通过解析就可以获取的,还需要进一步分析。
登录成功.jpg -
通过浏览chrome可以看到通过get请求得到的,其中no并不是直接可以得到的,也需要分析之前的请求。
图片链接.png -
no的获取链接
no的链接.png
json内容.png - 获取方式已经比较清晰了,获取no后使用get即可获得头像
#获取名字及no
new_url=r'http://ecard.zuel.edu.cn/Account/Operator.ashx?cmd=getuserbysno'
thr_con=r.post(new_url,headers=headers).content.decode('utf-8')
print(thr_con)
row_name=json.loads(thr_con)
name=row_name[0]['NAME']
no=row_name[0]['NO']
pic_url=r'http://ecard.zuel.edu.cn/Account/Img.aspx?cmd=img&no='+no+'&sno='+sno
pic_con=r.get(ex_url,headers=headers).content
open(name+'.jpg', 'wb').write(pic_con)
展望
照片的玩法有很多,我暂时只想到一个
如果有的同学比如班干部之类的,有很多同学的学号及身份证号,就可以稍加修改下,下载大量同学的黑照片,然后提交到百度AI的人像识别接口,让系统识别给人像打分。
from aip import AipFace
import os
""" 你的 APPID AK SK """
APP_ID = '*****'
API_KEY = 'AvvLEkGC8tsZne6k4SbkP9Em'
SECRET_KEY = '3Yi07s4ttZjWgQnx1UlHeAl9LrAmggvP'
client = AipFace(APP_ID, API_KEY, SECRET_KEY)
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
def get_rate(pic_path):
options = {}
options["max_face_num"] = 1
options["face_fields"] = "beauty"
image = get_file_content(pic_path)
result=client.detect(image,options)
result=result['result'][0]['beauty']
return result
file_path='*****'
result=get_rate(file_path)
print (result)
百度给我打的分是62.161457061768。哈哈,勉强及格
网友评论