序文
みなさん、こんにちは。今日はとても実践的なことをお話します。最近、あるファンが私に個人的にメッセージを送ってきて、大きな研究のリストを自動的にチェックできるプログラムはないかと尋ねましたが、ファンとして、クラスの幹事として、彼女は大きな研究のリストをチェックするたびに特別な頭痛を感じています勉強。次に、大きな学習リストを自動的にチェックできる小さなプログラムを書きます。
環境使用
- 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 インタープリターが適切に設定されていない可能性があります。
考えやアイデア
プログラミング:
QN 大学の学習リストを確認するのに役立つプログラムを作成できます。このプログラムは、入力した学習リストに従って、リスト内の全員が学習タスクを完了したかどうかを自動的に確認できます。このプログラムは Python などのプログラミング言語を使用して作成できます。
しかし、この方法はあまりにも面倒であることがわかりました。これと私の方法の違いは何ですか?リストを直接作成すれば良いのではないかと思いました。時間とエネルギーを節約します。
機能実現
まず、クラスの学習リストをクロールし、クラスの全生徒のリストと比較し、未完了の青少年の学習リストを自動的に出力します。操作方法は、私のステップバイステップの操作を参照してください。
学習期間の最大数を取得する
ここで大規模調査のセッション数を取得するため、table_name の値を変更する必要はありません。ここでのデフォルトは最新の大規模調査です。
url = 'http://dxx.ahyouth.org.cn/api/peopleRankList?level1=%E7%9B%B4%E5%B1%9E%E9%AB%98%E6%A0%A1'
url_res = requests.get(url)
name = url_res.json()['list'][0]['name']
table_name = url_res.json()['list'][0]['table_name']
print("你正在查询",name,"青年大学习\n")
私たちのプログラムを実行してください、今日は大きな学習の 10 番目の期間です、説明してください、私たちのプログラムは問題ありません、私たちはダウンし続けています。
2023 年 - 10 学期の大規模研究についてお問い合わせです
リストを取得する
次は最も重要なステップで、以下のアドレスを構築します。クラス内の大きな学習のリストのアドレスを見つけます。開発者ツールを使用できる場合は、以下のアドレスを直接見つけることができます。使い方がわからなくても問題ありません。下のレベルの背後にある値。
url = 'http://dxx.ahyouth.org.cn/api/peopleRankStage'
data = {
'table_name': table_name,
'level1': '直属高校',
'level2': '某某大学',
'level3': '数理学院',
'level4': '数学类2101',
}
res = requests.get(url, params=data)
level1 は直接提携している大学なので、ここで変更する必要はありません。
level2は学校名です。自分の学校名を入力してください。
level3 は大学の名前です。自分の大学の名前を入力してください。ここでは安慶師範大学を例に挙げますが、その名前は私たちが目にする名前とまったく同じである必要があることに全員が注意する必要があります。特にクラス名。後で、あまり詳しくは説明しません。
level4 はクラスの名前です。独自のクラス名を入力するだけです。
「数学 2101」を例に、次のコードを説明します。requests
ここでは、ライブラリ内の メソッドを呼び出し get()
、URL と data
辞書を渡し、サーバーから返される結果を取得します。結果は、クエリの結果を含む辞書、つまり学習されたリストです。
返される res.text は文字化けすることがわかりました。トランスコードするか、json を使用して直接解決することができます。
html_lists = res.json()['list']['list']
このコードは、 res.json()
複数の辞書を含むリストを返します。各辞書はユーザーの情報を表します。['list']['list']
辞書の最初のキー、つまりユーザーの名前と学習時間に対応するリストを表します。
効果を見てみましょう:
リストの比較
次に、最も重要な部分は、リストを比較することです。
次のプログラムを見てみましょう。
for html_list in html_lists:
username = html_list['username']
yixue_list.append(username)
html_lists
次に、リスト内の各辞書 をループし 、username
その中のキーを取得して、 yixue_list
リストに追加します。このようにして、ループが終了した後、yixue_list
リストには大きな学習を行ったクラスの名前がすべて含まれるようになります。
weixue_list = list(set(list_all) - set(yixue_list))
if not weixue_list:
print("全部完成青年大学习")
else:
print("未完成的名单如下\n", weixue_list)
私たちのコードでは、Python のセット操作とリスト操作を使用します。
まず、 set
すべてのユーザーの名前をコレクションに変換することで、重複した名前を削除します。次に、 set
セット 内の名前をyixue_list
セットに変換し、 set
2 つのセットの差分を新しいセットに変換します。
次に、新しいコレクションが空かどうかを確認します。空の場合は、すべてのユーザーが大規模な調査を完了しており、プログラムはメッセージを出力します。それ以外の場合は、短大を修了できなかった同級生のリストを出力し、印刷します。
ここで、クラスの生徒全員の名前をリストに入れますlist_all
。ここで私たちの機能が実現されます。
list_all = ['张三', '李四', '王二麻子']
効果
この時点でプログラムは実現されていますが、振り返ってみると、プログラムをカプセル化して、誰でも直接使用できるようにします。
py プログラムを exe ファイルにパッケージ化して、実行時の効果を見てみましょう。
完全なコード
以下に完全なコードを示します。ご質問がある場合は、コメント エリアにメッセージを残してください。
import requests
yixue_list = []
list_all = ['张三', '李四', '王二麻子']# 班级同学名单
url = 'http://dxx.ahyouth.org.cn/api/peopleRankList?level1=%E7%9B%B4%E5%B1%9E%E9%AB%98%E6%A0%A1'
url_res = requests.get(url)
name = url_res.json()['list'][0]['name']
table_name = url_res.json()['list'][0]['table_name']
print("你正在查询", name, "青年大学习\n")
url = 'http://dxx.ahyouth.org.cn/api/peopleRankStage'
data = {
'table_name': table_name,
'level1': '直属高校',
'level2': '学校名字',
'level3': '学院名字',
'level4': '班级名字',
}
res = requests.get(url, params=data)
html_lists = res.json()['list']['list']
print(html_lists)
for html_list in html_lists:
username = html_list['username']
yixue_list.append(username)
weixue_list = list(set(list_all) - set(yixue_list))
if not weixue_list:
print("全部完成青年大学习")
else:
print(len(weixue_list))
print("未完成的名单如下\n", weixue_list)