R5秋期のAP直前なので(直前すぎますがw)過去問をしようということになりました。
でも、一つ一つダウンロードするのは面倒くさい!ということでPythonを使って一括ダウンロードしてみました
同様の記事はたくさんありますが、IPAのホームページが最近更新された影響でその方法ではできなくなってるっぽいので新たに書いてみました。
全体のソースコード
全体のソースコードはこんな感じです
from os import makedirs, path
from time import sleep
from urllib.request import urlretrieve
ids = [
["ps6vr70000010d6y-att", "2023r05h_ap_"],
["gmcbt80000008smf-att", "2022r04a_ap_"],
["gmcbt80000009sgk-att", "2022r04h_ap_"],
["gmcbt8000000apad-att", "2021r03a_ap_"],
["gmcbt8000000d5ru-att", "2021r03h_ap_"],
["gmcbt8000000d05l-att", "2020r02o_ap_"],
["gmcbt8000000dict-att", "2019r01a_ap_"],
["gmcbt8000000ddiw-att", "2019h31h_ap_"],
["gmcbt8000000f01f-att", "2018h30a_ap_"],
["gmcbt8000000fabr-att", "2018h30h_ap_"],
["gmcbt8000000fqpm-att", "2017h29a_ap_"],
["gmcbt8000000fzx1-att", "2017h29h_ap_"],
["gmcbt8000000g6fw-att", "2016h28a_ap_"],
["gmcbt8000000gn5o-att", "2016h28h_ap_"],
["gmcbt8000000gxj0-att", "2015h27a_ap_"],
["ug65p90000000f52-att", "2015h27h_ap_"],
["ug65p90000000ye5-att", "2014h26a_ap_"],
["ug65p90000001dzu-att", "2014h26h_ap_"],
["ug65p900000027za-att", "2013h25a_ap_"],
["ug65p90000002e6g-att", "2013h25h_ap_"],
["ug65p90000002h5m-att", "2012h24a_ap_"],
["ug65p900000038er-att", "2012h24h_ap_"],
["ug65p90000003ojp-att", "2011h23a_ap_"],
["ug65p90000003ya2-att", "2011h23tokubetsu_ap_"],
["ug65p90000004d6f-att", "2010h22a_ap_"],
["ug65p90000004n2z-att", "2010h22h_ap_"],
["gmcbt8000000f3yi-att", "2009h21a_ap_"],
["ug65p90000009bhl-att", "2009h21h_ap_"]]
fileTypes = [["am_qs", "am_ans", "pm_qs", "pm_ans"],
["AM_問題", "AM_解答", "PM_問題", "PM_解答"]]
baseUrl = "https://www.ipa.go.jp/shiken/mondai-kaiotu/"
for id in ids:
# 季節を特定する
filetmp = (id[1])[7]
if filetmp == "h":
filetmp = "春季"
elif filetmp == "a":
filetmp = "秋季"
else:
filetmp = "特別"
createDir = f"./ap/{(id[1])[0:4]}/{filetmp}"
# ディレクトリが存在するか判定
if not path.exists(createDir):
makedirs(createDir)
for i, fileType in enumerate(fileTypes[0]):
url = f"{baseUrl}{id[0]}/{id[1]}{fileType}.pdf"
filen = f"{(id[1])[0:4]}{filetmp}-{fileTypes[1][i]}.pdf"
urlretrieve(url, f"{createDir}/{filen}")
print(f"{filen} saved successflly.")
sleep(3)
print("ok")
応用方法
過去問のリンクは以下の形式なので、
h ttps://www.ipa.go.jp/shiken/mondai-kaiotu/{①}/{②}{③}{④}_{⑤}_{⑥}_{⑦}.pdf
-
年度に固有な文字列
上記コードの「ids」各要素の0番地の文字列 -
西暦
-
和暦
令和5年→r05、平成22年→h22にする -
季節
季節 URLの文字 春季 s 秋季 a 特別試験 tokubetsu -
試験区分
試験区分 URLの文字 応用情報技術者試験 ap ITストラテジスト試験 st システムアーキテクト試験 sa プロジェクトマネージャ試験 pw ネットワークスペシャリスト試験 nw データベーススペシャリスト試験 db エンベデッドシステムスペシャリスト試験 es ITサービスマネージャ試験 sm システム監査技術者試験 au 情報処理安全確保支援士試験 sc ただし、高度試験の午前Iは全て同じなので、「koudo」を指定
試験によって実施しない回があるのでその辺りの処理は必要です -
時間帯
時間帯 URLの文字 午前 am 午後 pm 午前I(高度共通) am1 午前Ⅱ am2 午後I pm1 午後Ⅱ pm2 -
種類
種類 URLの文字 問題 qs 解答 ans 採点講評 cmnt
使っていただけると幸いです!