序文
現代の教育において、教育管理システムは学校管理と教育の重要な部分となっています。しかし、さまざまな理由により、教育行政システムの成績証明書をダウンロードすることができず、無用のトラブルやご迷惑をおかけしております。したがって、教育行政システムの成績証明書収集事業の意義は大きい。
目次
環境使用
- Python 3.9
- パイチャーム
モジュールの使用
- リクエスト
モジュールの紹介
- リクエスト
request は非常に実用的な Python HTTP クライアント ライブラリです。クローラーやテスト サーバーがデータに応答するときによく使用されます。requests は Python 言語のサードパーティ ライブラリで、HTTP リクエストの送信に特に使用されます。 URLlib。
- 小包
parsel は Python サードパーティ ライブラリであり、css selector + xpath + re と同等です。
Parsel は、scrapy チームによって開発されており、scrapy 内で独自にパーセルを抽出しており、html および xml コンテンツを簡単に解析し、必要なデータを取得できます。
BeautifulSoup と比較すると、xpath と parser はより効率的で使いやすいです。
- 再
re モジュールは文字列をマッチングするための Python 独自のモジュールです。このモジュールで提供される多くの関数は正規表現に基づいて実装されており、正規表現は文字列に対してあいまいマッチングを実行し、必要な文字列部分を抽出します。すべての言語で共通です。
- OS
os は「オペレーティング システム」の略語で、その名前が示すように、os モジュールはさまざまな Python プログラムがオペレーティング システムと対話するためのインターフェイスを提供します。os モジュールを使用すると、一方ではオペレーティング システムと簡単に対話できるようになり、他方ではコードの移植性が大幅に向上します。
- csv
これは、一般にカンマ区切り値ファイルとして知られるファイル形式で、Excel ソフトウェアまたはテキスト文書で開くことができます。データフィールドは半角カンマ(他の文字も可)で区切られており、Excelで開くとカンマが区切り文字に変換されます。csv ファイルには表形式のデータがプレーン テキストで保存され、さまざまなオペレーティング システムと互換性があります。
モジュールのインストールの問題:
- Python サードパーティ モジュールをインストールする場合:
win + R、「cmd」と入力して「OK」をクリックし、インストールコマンド pip install モジュール名 (pip install 要求) を入力して Enter を押します。
pycharmの「ターミナル」をクリックしてインストールコマンドを入力します。
- インストール失敗の理由:
- 失敗 1: pip は内部コマンドではありません
解決策: 環境変数を設定する
- 失敗 2: 赤いレポートがたくさんある (読み取りタイムアウト)
解決策: ネットワーク リンクがタイムアウトするため、ミラー ソースを切り替える必要があります。
清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:https://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 华中理工大学:https://pypi.hustunique.com/ 山东理工大学:https://pypi.sdutlinux.org/ 豆瓣:https://pypi.douban.com/simple/ 例如:pip3 install -i https://pypi.doubanio.com/simple/ 模块名
- 失敗 3: cmd にはインストール済みと表示されるか、インストールは成功しましたが、依然として pycharm にインポートできません
解決策: 複数の Python バージョンがインストールされている (anaconda または Python は 1 つしかインストールできない) か、1 つをアンインストールするか、pycharm の Python インタープリターが適切に設定されていない可能性があります。
コード
前回の記事ではPythonで感情音声を収集する方法を紹介しました。今日は、教育管理システムで成績証明書を収集し、自分の成績を収集する方法を学びましょう。自分の学校の教育管理システムを収集してみるのもよいでしょう。
リクエストを送信する
まず、ターゲット URL、つまり取得する必要のあるデータを決定します。
各行のデータを取得する必要があるので、次に開発者ツールを使用します。結果がどこにあるのか見てみましょう。それはWebページのソースコードにありますか。次に、Web ページのソース コードを取得するリクエストを送信します。
各学校の教育管理システムは異なりますが、原理は同じです。パケット キャプチャ分析を通じて、私たちの学校では成績が 1 つのデータ パケット、つまり各学期ごとに 1 つのデータ パケットに格納されていることがわかります。
http://jwxt.aqnu.edu.cn/student/for-std/grade/sheet/info/73127?semester={Semester}'
次に、次のステップは簡単です。必要なのはデータをリクエストすることだけです。もちろん、Cookie にはログイン情報が含まれているため、Cookie を追加する必要があります。
前のコードがどのように記述されているかを見てみましょう。
semesters = ["44", "45", "46", "66", "126", ]
for Semester in semesters:
url = f'http://jwxt.aqnu.edu.cn/student/for-std/grade/sheet/info/73127?semester={Semester}'
headers = {
'Cookie': 'cookies',
}
res = requests.get(url, headers=headers)
print(url, res)
ここでは複数のページを直接移動します。当校は Cookie のみをチェックし、リクエスト ヘッダーの要件はありません。Cookie にはログイン情報が含まれるため、ここでは示しませんが、学校の教育管理システムを収集するときに独自の Cookie を使用できます。
データを取得する
id2semesters = res.json()['id2semesters']
semester = id2semesters[f'{Semester}']['nameZh']
semesterId2studentGrades = res.json()['semesterId2studentGrades'][f'{Semester}']
このコードは、まず、JSON 応答から学期と学生の成績点情報を取得し、それを変数 semester
and に格納しますsemesterId2studentGrades
。
for semesterId2studentGrade in semesterId2studentGrades:
course = semesterId2studentGrade['course'] # 课程
course_nameZh = course['nameZh'] # 课程名称
credits = course['credits'] # 课程学分
try:
courseProperty = semesterId2studentGrade['courseProperty']
courseProperty_name = courseProperty['name']
except TypeError:
courseProperty_name = "NOLL"
gp = semesterId2studentGrade['gp'] # 绩点
gaGrade = semesterId2studentGrade['gaGrade'] # 成绩
gradeDetails = semesterId2studentGrade['gradeDetail'] # 明细原文
gradeDetail = re.findall('data-typeid=.*?>(.*?)</span>', gradeDetails)
次に、 for
ループを 使用してsemesterId2studentGrades
各要素を反復処理し、 course
属性を使用してその学期のコース情報を取得します。
これが json 値です。これらを記述さえすれば難しいことはありません。必要なコンテンツを取得できます。効果を見てみましょう。
セーブデータ
データの保存は簡単なので、私たちはこれを何度も行ってきました。
f = open('个人成绩单.csv', mode='a', encoding='utf-8_sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['学期','课程名称', '课程学分', '课程类型', '成绩', '学分绩点',
'成绩明细'])
メソッドを使用してデータを書き込みます csv_writer.writerow()
。この例では、学期、コースのタイトル、コースの単位、コースの種類、成績、単位ポイント、および成績の詳細を含むリストを作成します。
次のステップでは、辞書に書き込んで保存します。
dit = {
'学期': semester,
'课程名称': course_nameZh,
'课程学分': credits,
'课程类型': courseProperty_name,
'成绩': gaGrade,
'学分绩点': gp,
'成绩明细': gradeDetail,
}
csv_writer.writerow(dit)
このコードでは、 辞書を CSV ファイルに書き込むcsv_writer.writerow()
メソッドを 使用します。 パラメータは書き込む列名を指定します。この例では、 を指定しました 。dit
fieldnames
['学期','课程名称', '课程学分', '课程类型', '成绩', '学分绩点', '成绩明细']
要約する
つまり、教育行政システムの成績証明書の収集は、成績証明書の収集だけでなく、データ収集能力の向上にもつながる、非常に有意義なプロジェクト実践です。実装プロセスでは、データの正確性と完全性に注意を払い、プロジェクトの安全性と信頼性を確保するために必要な措置を講じる必要があります。