python爬虫類の正規教務システム
アップグレード版は以下の通りですhttp://blog.csdn.net/nghuyong/article/details/52203443
1.前期準備
1.1缘由
ある日、正方教務システムが急に進級したことが分かりました.私達の学校江南大学を例にして、
.
最初はバグがありました.http://202.195.144.163/jndx/default3.aspx直接に検証コードを飛び越えることができます.出現したのはユーザー名とパスワードだけです.今はもう修復されました.
検証コードの問題を解決しなければなりません.
基本的な考え方はいくつありますか?は、認証コードをローカルにダウンロードし、手動で認証コードを入力する .は、検証コードのocr識別アルゴリズムを用いて、自動解読検証コード(テストされた識別率が低い)を実行する .ネットワーク上の検証コード識別インターフェース(有料) を介して
最後はやはり手作りで入力しました.
スーパーコースの解決策を見てみました.手作りの認証コード
です.
1.2必要なツール chromeブラウザF 12は、ウェブページの相互作用を簡単に観察することができます. fiddlerネットワークトラッキングツール pythonを使用して開発するにはいくつかのパケットが必要です.1.re正則式2.requestsの強力なネットワークパケット3.lxml xpathの依存性 2.爬虫類を開始する
2.1教務システムに登録する
2.1.1基本的な考え方
sessionを開いて、次の爬虫作業を完了します.毎回のクッキーが一致するように確保します.まず教務システムのトップページをつかんでから、もう一度単独で検証コードを取って、シミュレーションは正常に閲覧時に確認コードが見えなくなり、一回更新します.取得した検証コードをローカルにダウンロードし、検証コードを記入し、一緒に登録データpostを過去に登録し、登録を実現する.
2.1.2登録分析検証コードのアドレスは、チェック要素によって観測された:http://202.195.144.163/jndx/CheckCode.aspx?
ウェブページの登録はpostデータの内容を調べます.
![python爬虫正方教务系统_第4张图片](https://s1.md5.ltd/image/f36b3c6379d9c74004645971e93a5968.jpg)
パラメータの説明: __VIEWSTATE:dDwtMT MxNjk 0 NzYxNTs 7 Pv+4 BrjArC 82 wBF 5 MVVE+YUeOI 7 j これは.Netフレーム特有のもので,これまでのソースコードからこの値を見つけることができるように変化します. Text Box 1:1010101045418 学号パラメータ TextBox 2:34261990950646 パスワードのパラメータ TextBox 3:icdc 認証コード Radio ButonList 1:(unable to decode value) これはrawdataの中で%D 1%A 7%C 9%FAです.これはurlコード後のものです.反urlコードから転出したのは学生
です. Button 1: lbLanguage: この二つのパラメータはいずれも空の値です.
2.1.3コード実現![python爬虫正方教务系统_第5张图片](https://s1.md5.ltd/image/e75ce438f5437519a06f3949a31ab8dd.jpg)
![python爬虫正方教务系统_第6张图片](https://s1.md5.ltd/image/8fb911cdac71b4758590768e1914a63f.jpg)
2.2教務情報の取得教務システムに登録してから教務システムのすべての情報を取得することができます. ![python爬虫正方教务系统_第7张图片](https://s1.md5.ltd/image/41215ff5f12e7876bb00149a54706035.jpg)
ログイン後のトップページです.ここから名前と学号情報を抽出できます.xpathを通してhtmlから抽出すればいいです.次は、這い取り授業の情報を示します. 先グリップ分析: ![python爬虫正方教务系统_第8张图片](https://s1.md5.ltd/image/946cb74b87a675f71fc4936ca23c7099.jpg)
授業表をクリックしてアクセスするページは
http://202.195.144.163/jndx/xskbcx.aspx?xh=1030614418&xm=%BA%FA%D3%C2&gnmkdm=N121603
いくつかのパラメータxhは学号で、xmは名前で、urlコードを行いました.
注意:headersにはこのようなパラメータがあります.一つは持っていなければ、失敗します.Referer:http://202.195.144.163/jndx/xs_main.aspx?xh=101010101036418
2.符号化実現:![python爬虫正方教务系统_第9张图片](https://s1.md5.ltd/image/116e8a3e5259821cc2a78990a450bcb5.jpg)
すでに授業表のソースコードを取得しました.以下の正規表現で具体的な授業表の情報を抽出できます.
![python爬虫正方教务系统_第10张图片](https://s1.md5.ltd/image/8b95102f83e8cd10e989dc62ed70c018.jpg)
3.これからやること認証コードの自動クラックを実現することができますか?
![python爬虫正方教务系统_第11张图片](https://s1.md5.ltd/image/c9c44b9eab1c8860dff0a55a4acca6ed.jpg)
検証コードを確認するには、ノイズを除去してから分割してから、ocrで識別する必要があります. 針はhtmlの表に対して、方法を書いてもいいですか?自動解析)のテーブルはjsonのデータタイプになります.
1.前期準備
1.1缘由
ある日、正方教務システムが急に進級したことが分かりました.私達の学校江南大学を例にして、
![python爬虫正方教务系统_第1张图片](https://s1.md5.ltd/image/cfd1cac38e291ab8ee903741759eb483.jpg)
最初はバグがありました.http://202.195.144.163/jndx/default3.aspx直接に検証コードを飛び越えることができます.出現したのはユーザー名とパスワードだけです.今はもう修復されました.
検証コードの問題を解決しなければなりません.
基本的な考え方はいくつありますか?
最後はやはり手作りで入力しました.
スーパーコースの解決策を見てみました.手作りの認証コード
![python爬虫正方教务系统_第2张图片](https://s1.md5.ltd/image/699694aa3311046bf316db3ea299a329.jpg)
1.2必要なツール
2.1教務システムに登録する
2.1.1基本的な考え方
sessionを開いて、次の爬虫作業を完了します.毎回のクッキーが一致するように確保します.まず教務システムのトップページをつかんでから、もう一度単独で検証コードを取って、シミュレーションは正常に閲覧時に確認コードが見えなくなり、一回更新します.取得した検証コードをローカルにダウンロードし、検証コードを記入し、一緒に登録データpostを過去に登録し、登録を実現する.
2.1.2登録分析
![python爬虫正方教务系统_第3张图片](https://s1.md5.ltd/image/ac4056e0828173a0542eb13d58b928f1.jpg)
![python爬虫正方教务系统_第4张图片](https://s1.md5.ltd/image/f36b3c6379d9c74004645971e93a5968.jpg)
パラメータの説明:
![这里写图片描述](https://s1.md5.ltd/image/d768c5a35f8d47e92366dd20a682d1e0.jpg)
2.1.3コード実現
# author: HuYong
#-*-coding:utf-8-*-
import os
import re
from lxml import etree
import requests
import sys
#
reload(sys)
sys.setdefaultencoding( "utf-8" )
#
studentnumber = "1030614418"
password = "342626199509064718"
#
s = requests.session()
url = "http://202.195.144.163/jndx/default2.aspx"
response = s.get(url)
# __VIEWSTATE
# __VIEWSTATE = re.findall("name=\"__VIEWSTATE\" value=\"(.*?)\"",response.content)[0]
# xpath __VIEWSTATE
selector = etree.HTML(response.content)
__VIEWSTATE = selector.xpath('//*[@id="form1"]/input/@value')[0]
#
imgUrl = "http://202.195.144.163/jndx/CheckCode.aspx?"
imgresponse = s.get(imgUrl, stream=True)
print s.cookies
image = imgresponse.content
DstDir = os.getcwd()+"\\"
print(" :"+DstDir+"code.jpg"+"
")
try:
with open(DstDir+"code.jpg" ,"wb") as jpg:
jpg.write(image)
except IOError:
print("IO Error
")
finally:
jpg.close
#
code = raw_input(" :")
# post
RadioButtonList1 = u" ".encode('gb2312','replace')
data = {
"RadioButtonList1":RadioButtonList1,
"__VIEWSTATE":__VIEWSTATE,
"TextBox1":studentnumber,
"TextBox2":password,
"TextBox3":code,
"Button1":"",
"lbLanguage":""
}
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36",
}
#
response = s.post(url,data=data,headers=headers)
print " !"
![python爬虫正方教务系统_第5张图片](https://s1.md5.ltd/image/e75ce438f5437519a06f3949a31ab8dd.jpg)
![python爬虫正方教务系统_第6张图片](https://s1.md5.ltd/image/8fb911cdac71b4758590768e1914a63f.jpg)
2.2教務情報の取得
![python爬虫正方教务系统_第7张图片](https://s1.md5.ltd/image/41215ff5f12e7876bb00149a54706035.jpg)
ログイン後のトップページです.ここから名前と学号情報を抽出できます.xpathを通してhtmlから抽出すればいいです.
def getInfor(response,xpath):
content = response.content.decode('gb2312') # gb2312
selector = etree.HTML(content)
infor = selector.xpath(xpath)[0]
return infor
#
text = getInfor(response,'//*[@id="xhxm"]/text()')
text = text.replace(" ","")
studentnumber = text[:10]
studentname = text[10:].replace(" ","")
print " :"+studentname
print " :"+studentnumber
![python爬虫正方教务系统_第8张图片](https://s1.md5.ltd/image/946cb74b87a675f71fc4936ca23c7099.jpg)
授業表をクリックしてアクセスするページは
http://202.195.144.163/jndx/xskbcx.aspx?xh=1030614418&xm=%BA%FA%D3%C2&gnmkdm=N121603
いくつかのパラメータxhは学号で、xmは名前で、urlコードを行いました.
注意:headersにはこのようなパラメータがあります.一つは持っていなければ、失敗します.Referer:http://202.195.144.163/jndx/xs_main.aspx?xh=101010101036418
2.符号化実現:
urlStudentname = urllib.quote_plus(str(studentname.encode('gb2312')))
#
kburl = "http://202.195.144.163/jndx/xskbcx.aspx?xh="+studentnumber+"&xm="+urlStudentname+"&gnmkdm=N121603"
# Referer
headers =
{
"Referer":"http://202.195.144.163/jndx/xs_main.aspx?xh=1030614418",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36",
}
response = s.get(kburl,headers=headers)
html = response.content.decode("gb2312")
print html
![python爬虫正方教务系统_第9张图片](https://s1.md5.ltd/image/116e8a3e5259821cc2a78990a450bcb5.jpg)
すでに授業表のソースコードを取得しました.以下の正規表現で具体的な授業表の情報を抽出できます.
![python爬虫正方教务系统_第10张图片](https://s1.md5.ltd/image/8b95102f83e8cd10e989dc62ed70c018.jpg)
3.これからやること
![python爬虫正方教务系统_第11张图片](https://s1.md5.ltd/image/c9c44b9eab1c8860dff0a55a4acca6ed.jpg)
検証コードを確認するには、ノイズを除去してから分割してから、ocrで識別する必要があります.