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データの内容を調べます.
パラメータの説明: __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コード実現
2.2教務情報の取得教務システムに登録してから教務システムのすべての情報を取得することができます.
ログイン後のトップページです.ここから名前と学号情報を抽出できます.xpathを通してhtmlから抽出すればいいです.次は、這い取り授業の情報を示します. 先グリップ分析:
授業表をクリックしてアクセスするページは
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.符号化実現:
すでに授業表のソースコードを取得しました.以下の正規表現で具体的な授業表の情報を抽出できます.
3.これからやること認証コードの自動クラックを実現することができますか?
検証コードを確認するには、ノイズを除去してから分割してから、ocrで識別する必要があります. 針はhtmlの表に対して、方法を書いてもいいですか?自動解析)のテーブルはjsonのデータタイプになります.
1.前期準備
1.1缘由
ある日、正方教務システムが急に進級したことが分かりました.私達の学校江南大学を例にして、.
最初はバグがありました.http://202.195.144.163/jndx/default3.aspx直接に検証コードを飛び越えることができます.出現したのはユーザー名とパスワードだけです.今はもう修復されました.
検証コードの問題を解決しなければなりません.
基本的な考え方はいくつありますか?
最後はやはり手作りで入力しました.
スーパーコースの解決策を見てみました.手作りの認証コードです.
1.2必要なツール
2.1教務システムに登録する
2.1.1基本的な考え方
sessionを開いて、次の爬虫作業を完了します.毎回のクッキーが一致するように確保します.まず教務システムのトップページをつかんでから、もう一度単独で検証コードを取って、シミュレーションは正常に閲覧時に確認コードが見えなくなり、一回更新します.取得した検証コードをローカルにダウンロードし、検証コードを記入し、一緒に登録データpostを過去に登録し、登録を実現する.
2.1.2登録分析
パラメータの説明:
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 " !"
2.2教務情報の取得
ログイン後のトップページです.ここから名前と学号情報を抽出できます.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
授業表をクリックしてアクセスするページは
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
すでに授業表のソースコードを取得しました.以下の正規表現で具体的な授業表の情報を抽出できます.
3.これからやること
検証コードを確認するには、ノイズを除去してから分割してから、ocrで識別する必要があります.