教務システムのシミュレーション登録と成績の向上
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等
ブラウザの選択については、Firefox(postデータが見え、再送データをシミュレートできる)をお勧めします.もちろん、fiddleなどのバッグをつかむツールがあれば、他のブラウザでもOKです.ログインインタフェースを開くには、次の手順に従います.
アカウントのパスワードを入力し、F 12を押して開発者ツールを開き、ログインをクリックします.
このとき、自分の名前、登録日、学業情報など、ホームページに自分の情報が表示されます.開発者ツールのネットワークウィンドウを観察します.
ここで、1つ目はpostログイン要求、リクエストヘッダ(元のヘッダ)とリクエストパラメータを観察することです.
編集要求ヘッダをコピーします.
ここでは、リクエストに影響を及ぼさないフィールドをいくつか削除します.要求パラメータを表示します.
編集要求パラメータのコピー
テストの結果、ログインに成功しました.
Webページの日付とユーザー名
開発者ツールでこの情報を見つけます.
上記の要求サイトが変更され、要求方法がGetであることに注意してください.
getリクエストを使用してWebページ情報を取得し、bs 4解析でそれぞれ日付とユーザー名を取得します.
ここで説明するのは、ユーザー名と日付を取得する際にreで無関係文字を削除する必要があることです.
ホームページの学業情報は前図を参照してください.ここでも開発者ツールを開き、関連情報を見つけます.
ここで要求ウェブサイトが異なりpost要求であることに注意してください.これは要求ヘッダと要求パラメータを見つける必要があります.
要求パラメータは空の値が1つしかありません.
ここで注意しなければならないのは、要求ヘッダに「Accept」フィールド(要求を示すJSONデータ)を追加する必要があり、そうしないとエラーが発生することである.
ホームページで成績照会の合格成績をクリックすると、各学期の各学科の成績が表示されます.
同様に、開発者ツールで次の情報を見つけます.
最初のレッスンを開く
必要な情報を見つけることができます.振り返ってお願いの頭を見る.
参照記述コード.
これで、カリキュラム情報の取得が完了します.
ここにはいくつかの問題を説明する必要があります.テスト中にリクエストが失敗したことがあります.これは、Webページがタイムアウト時間を設定し、Cooikesが失効したためです. 2. 前の問題に対してrequestsにはセッション保持機能があります.しかし、私は使用中に問題があります.
このブログはウェブページからJSONデータを取得し、次のブログでは学期の成績を照会したり、ある学科の成績を照会したりする機能を提供します.教務システムシミュレーション登録と爬取二
-前に書いて
夏休みの間、学校の学生教務システムが大きく変わり、以前の微信公共号の爬虫類が使えなくなったことが多い.早く成績を調べたいのですが、どうすればいいですか?ああ、自分で衣食を豊かにして、自分で爬虫類を書いてもいいですよ.前回、中国大学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データを取得し、次のブログでは学期の成績を照会したり、ある学科の成績を照会したりする機能を提供します.教務システムシミュレーション登録と爬取二