python爬虫類の正規教務システム

11972 ワード

アップグレード版は以下の通りですhttp://blog.csdn.net/nghuyong/article/details/52203443
1.前期準備
1.1缘由
ある日、正方教務システムが急に進級したことが分かりました.私達の学校江南大学を例にして、python爬虫正方教务系统_第1张图片.
最初はバグがありました.http://202.195.144.163/jndx/default3.aspx直接に検証コードを飛び越えることができます.出現したのはユーザー名とパスワードだけです.今はもう修復されました.
検証コードの問題を解決しなければなりません.
基本的な考え方はいくつありますか?
  • は、認証コードをローカルにダウンロードし、手動で認証コードを入力する
  • .
  • は、検証コードのocr識別アルゴリズムを用いて、自動解読検証コード(テストされた識別率が低い)を実行する
  • .
  • ネットワーク上の検証コード識別インターフェース(有料)
  • を介して
    最後はやはり手作りで入力しました.
    スーパーコースの解決策を見てみました.手作りの認証コードpython爬虫正方教务系统_第2张图片です.
    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? python爬虫正方教务系统_第3张图片
  • ウェブページの登録はpostデータの内容を調べます.
    python爬虫正方教务系统_第4张图片
    パラメータの説明:
  • __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コード実現
    # 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张图片
    python爬虫正方教务系统_第6张图片
    2.2教務情報の取得
  • 教務システムに登録してから教務システムのすべての情報を取得することができます.
  • python爬虫正方教务系统_第7张图片
    ログイン後のトップページです.ここから名前と学号情報を抽出できます.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张图片
    授業表をクリックしてアクセスするページは
    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张图片
    すでに授業表のソースコードを取得しました.以下の正規表現で具体的な授業表の情報を抽出できます.
    python爬虫正方教务系统_第10张图片
    3.これからやること
  • 認証コードの自動クラックを実現することができますか?
    python爬虫正方教务系统_第11张图片
    検証コードを確認するには、ノイズを除去してから分割してから、ocrで識別する必要があります.
  • 針はhtmlの表に対して、方法を書いてもいいですか?自動解析)のテーブルはjsonのデータタイプになります.