国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python用 KNN 進行驗證碼識別的實現方法

2020-02-22 23:08:47
字體:
來源:轉載
供稿:網友

前言

之前做了一個校園交友的APP,其中一個邏輯是通過用戶的教務系統來確認用戶是一名在校大學生,基本的想法是通過用戶的賬號和密碼,用爬蟲的方法來確認信息,但是許多教務系統都有驗證碼,當時是通過本地服務器去下載驗證碼,然后分發給客戶端,然后讓用戶自己填寫驗證碼,與賬號密碼一并提交給服務器,然后服務器再去模擬登錄教務系統以確認用戶能否登錄該教務系統。驗證碼無疑讓我們想使得用戶快速認證的想法破滅了,但是當時也沒辦法,最近看了一些機器學習的內容,覺得對于大多數學校的那些極簡單的驗證碼應該是可以用KNN這種方法來破解的,于是整理了一下思緒,擼起袖子做起來!

分析

我們學校的驗證碼是這樣的:,其實就是簡單地把字符進行旋轉然后加上一些微弱的噪點形成的。我們要識別,就得逆行之,具體思路就是,首先二值化去掉噪點,然后把單個字符分割出來,最后旋轉至標準方向,然后從這些處理好的圖片中選出模板,最后每次新來一張驗證碼就按相同方式處理,然后和這些模板進行比較,選擇判別距離最近的一個模板作為其判斷結果(亦即KNN的思想,本文取K=1)。接下來按步驟進行說明。

獲得驗證碼

首先得有大量的驗證碼,我們通過爬蟲來實現,代碼如下

#-*- coding:UTF-8 -*-import urllib,urllib2,cookielib,string,Imagedef getchk(number): #創建cookie對象 cookie = cookielib.LWPCookieJar() cookieSupport= urllib2.HTTPCookieProcessor(cookie) opener = urllib2.build_opener(cookieSupport, urllib2.HTTPHandler) urllib2.install_opener(opener) #首次與教務系統鏈接獲得cookie# #偽裝browser headers = { 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding':'gzip,deflate', 'Accept-Language':'zh-CN,zh;q=0.8', 'User-Agent':'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36' } req0 = urllib2.Request(  url ='http://mis.teach.ustc.edu.cn',  headers = headers  #請求頭 ) # 捕捉http錯誤 try : result0 = urllib2.urlopen(req0) except urllib2.HTTPError,e: print e.code #提取cookie getcookie = ['',] for item in cookie: getcookie.append(item.name) getcookie.append("=") getcookie.append(item.value) getcookie = "".join(getcookie)  #修改headers headers["Origin"] = "http://mis.teach.ustc.edu.cn" headers["Referer"] = "http://mis.teach.ustc.edu.cn/userinit.do" headers["Content-Type"] = "application/x-www-form-urlencoded" headers["Cookie"] = getcookie for i in range(number): req = urllib2.Request(  url ="http://mis.teach.ustc.edu.cn/randomImage.do?date='1469451446894'",  headers = headers   #請求頭 ) response = urllib2.urlopen(req) status = response.getcode() picData = response.read() if status == 200:  localPic = open("./source/"+str(i)+".jpg", "wb")  localPic.write(picData)  localPic.close() else:  print "failed to get Check Code "if __name__ == '__main__': getchk(500)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兰考县| 木兰县| 嵩明县| 维西| 石台县| 远安县| 元阳县| 东安县| 奉化市| 香格里拉县| 土默特左旗| 灵宝市| 兰溪市| 徐水县| 桐梓县| 孝昌县| 石河子市| 梅河口市| 东阿县| 汨罗市| 微山县| 平原县| 司法| 潞西市| 柘荣县| 大洼县| 古交市| 开封市| 富蕴县| 白城市| 大关县| 大安市| 诸暨市| 安福县| 山阳县| 景东| 琼海市| 镇坪县| 巨野县| 班玛县| 北海市|