一
想到馬上就要畢業(yè)了美澳,以后就再也登錄不了校園網(wǎng)了,干脆就把之前爬蟲的校園網(wǎng)登錄方法寫下來(lái)摸航,不過(guò)學(xué)校的登錄驗(yàn)證方法會(huì)修改制跟,記得16年爬的時(shí)候還需要填寫驗(yàn)證碼的,17年干脆就取消了驗(yàn)證碼酱虎,不過(guò)在爬取其他內(nèi)容的時(shí)候需要修改cookie的內(nèi)容雨膨。
希望有緣看到這篇文章的校友,如果在學(xué)習(xí)爬蟲之初想爬取校園網(wǎng)读串,提供幫助
步驟
-
首先當(dāng)然是打開登錄頁(yè)面
-
用chrome檢查登錄時(shí)的內(nèi)容聊记,登錄是post的方法,登錄的表單內(nèi)容也很簡(jiǎn)單恢暖,id是賬號(hào)排监,pwd是密碼,第一個(gè)state隱藏在源代碼中杰捂,很容易就能提取
#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)
-
登錄之后就顯示如下界面了舆床,但頭像并不是直接藏在源代碼里,通過(guò)解析就可以獲取的,還需要進(jìn)一步分析挨队。
-
通過(guò)瀏覽chrome可以看到通過(guò)get請(qǐng)求得到的谷暮,其中no并不是直接可以得到的,也需要分析之前的請(qǐng)求盛垦。
-
no的獲取鏈接
- 獲取方式已經(jīng)比較清晰了湿弦,獲取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)
展望
照片的玩法有很多,我暫時(shí)只想到一個(gè)
如果有的同學(xué)比如班干部之類的腾夯,有很多同學(xué)的學(xué)號(hào)及身份證號(hào)省撑,就可以稍加修改下,下載大量同學(xué)的黑照片俯在,然后提交到百度AI的人像識(shí)別接口,讓系統(tǒng)識(shí)別給人像打分娃惯。
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跷乐。哈哈,勉強(qiáng)及格