教務システムのシミュレーション登録と成績の向上

4329 ワード

本文はブロガーのオリジナルの文章で、転載して出典を明記してくださいhttps://blog.csdn.net/sc2079/article/details/82563854

-前に書いて


夏休みの間、学校の学生教務システムが大きく変わり、以前の微信公共号の爬虫類が使えなくなったことが多い.早く成績を調べたいのですが、どうすればいいですか?ああ、自分で衣食を豊かにして、自分で爬虫類を書いてもいいですよ.前回、中国大学MOOCカリキュラム情報の取得とデータストレージブログを書きましたが、selenium+Chromeを使用しています.今回はrequestsでpost、getリクエストを送信してデータを取得してみましょう.

-環境設定のインストール


運転環境:Python 3.6、Spyder依存モジュール:bs 4,requests.re,JSON,pymysql等

-作業開始


1.アナログログイン


ブラウザの選択については、Firefox(postデータが見え、再送データをシミュレートできる)をお勧めします.もちろん、fiddleなどのバッグをつかむツールがあれば、他のブラウザでもOKです.ログインインタフェースを開くには、次の手順に従います.
アカウントのパスワードを入力し、F 12を押して開発者ツールを開き、ログインをクリックします.
このとき、自分の名前、登録日、学業情報など、ホームページに自分の情報が表示されます.開発者ツールのネットワークウィンドウを観察します.
ここで、1つ目はpostログイン要求、リクエストヘッダ(元のヘッダ)とリクエストパラメータを観察することです.
編集要求ヘッダをコピーします.
headers2={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0',   
    'Cookie': 'JSESSIONID=bcdAIJyUvw0e24cRYH8ww;selectionBar=1443374',  
    }

ここでは、リクエストに影響を及ぼさないフィールドをいくつか削除します.要求パラメータを表示します.
編集要求パラメータのコピー
data={
      'j_captcha1':'error',
      'j_password':'××××××',
      'j_username':'×××××××××'
      }

テストの結果、ログインに成功しました.
url='http://×××××××××/j_spring_security_check'
r=requests.post(url,headers=headers,data=data)

2. 日付とユーザー名の取得


Webページの日付とユーザー名
開発者ツールでこの情報を見つけます.
上記の要求サイトが変更され、要求方法がGetであることに注意してください.
getリクエストを使用してWebページ情報を取得し、bs 4解析でそれぞれ日付とユーザー名を取得します.
''' '''
url2='http://××××××/index.jsp'
r2=requests.get(url2,headers=headers)  
soup=BS(r2.content,'html.parser')  
time=soup.find_all(name='i',attrs={'class':'ace-icon fa fa-calendar'})[1].parent.get_text()
time=re.sub('[
\r]','',time) # user=soup.find_all(name='span',attrs={'class':'user-info'})[0].get_text() user=re.sub('[
\t\r \,]','',user) #

ここで説明するのは、ユーザー名と日付を取得する際にreで無関係文字を削除する必要があることです.

3.学業情報の取得


ホームページの学業情報は前図を参照してください.ここでも開発者ツールを開き、関連情報を見つけます.
ここで要求ウェブサイトが異なりpost要求であることに注意してください.これは要求ヘッダと要求パラメータを見つける必要があります.
要求パラメータは空の値が1つしかありません.
''' '''
headers3={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'Referer': 'http://*********/index.jsp',
    'Cookie': 'JSESSIONID=bcdAIJyUvw0e24cRYH8ww;selectionBar=1443374',
    }
data3={
    'flag':''
    }
r3=requests.post(url3,headers=headers3,data=data3)
Academic_info=r3.json()   # JSON 
passed_course_num=Academic_info[0]['courseNum']    # 
failed_course_num=Academic_info[0]['coursePas']    # 
gpa=Academic_info[0]['gpa']              #GPA
courseName=Academic_info[0]['courseName']    # 
teacherName=Academic_info[0]['teacherName']    # 
jasName=Academic_info[0]['jasName']         # 

ここで注意しなければならないのは、要求ヘッダに「Accept」フィールド(要求を示すJSONデータ)を追加する必要があり、そうしないとエラーが発生することである.

4.全履修コース情報の取得


ホームページで成績照会の合格成績をクリックすると、各学期の各学科の成績が表示されます.
同様に、開発者ツールで次の情報を見つけます.
最初のレッスンを開く
必要な情報を見つけることができます.振り返ってお願いの頭を見る.
参照記述コード.
''' JSON '''
url4='http://zhjw.scu.edu.cn/student/integratedQuery/scoreQuery/allPassingScores/callback'
r4=requests.get(url4,headers=headers3)
all_grade_info=r4.json()  # JSON
with open('mygrades.json','w',encoding='utf-8') as f:   # 
    json.dump(all_grade_info,f,ensure_ascii=False)

これで、カリキュラム情報の取得が完了します.

-未完待機


ここにはいくつかの問題を説明する必要があります.テスト中にリクエストが失敗したことがあります.これは、Webページがタイムアウト時間を設定し、Cooikesが失効したためです.  2. 前の問題に対してrequestsにはセッション保持機能があります.しかし、私は使用中に問題があります.
conn = requests.session()

このブログはウェブページからJSONデータを取得し、次のブログでは学期の成績を照会したり、ある学科の成績を照会したりする機能を提供します.教務システムシミュレーション登録と爬取二