Die Geschichte des sofortigen Herunterladens des PDF-Dokuments der grundlegenden Information Engineer-Prüfung mit Python

Überblick

Laden Sie die PDF-Datei mit der letzten Frage von Basic Information Engineer Examination (FE) mit dem urllib-Paket von Python herunter.

Einzelheiten

Die bisherigen Fragen der Prüfung zum Basic Information Engineer werden auf der offiziellen IPA-Website (https://www.jitec.ipa.go.jp/1_04hanni_sukiru/_index_mondai.html) veröffentlicht. Fragen und Antworten werden jedoch jedes Jahr veröffentlicht, und Sie müssen auf die Seite jedes Jahres gehen und sie herunterladen. Verwenden Sie das urllib-Paket von Python, um Fragen und Antworten sofort herunterzuladen.

Suchen Sie die URL

Wenn Sie sich beispielsweise die in den letzten Fragen veröffentlichten Seiten ansehen, lautet die URL für die Frühjahrsprüfung 2015 wie folgt.

Die Struktur der URL der letzten Frage ist https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_ Zusätzlich zu [Westlicher Kalender] [Japanischer Kalender] _ [1 ODER 2] / [Westlicher Kalender] [Japanischer Kalender] [h ODER a] _fe_ [am ODER pm] _ [qs ODER ans ODER cmnt] .pdf Man kann sehen, dass

Implementierung

Ich habe den Code mit vielen for-Anweisungen geschrieben, ohne zu viel nachzudenken.

kakomon.py


import urllib.request

def download():
    #Gemeinsamer (erste Hälfte) Teil der URL
    urlbase = "https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_"
    
    #Frühling und Herbst
    season = {1:"h", 2:"a"}
    
    # 2009-Laden Sie das PDF 2019 herunter (Fragen / Antworten / Kommentare)
    for y in range(2009,2020):
        nendo = str(y) + "h" + str(y - 1988)  #Beispiel: 2009h21
        for s in range(1,3):
            for t in ["am","pm"]:
                if t == "pm":   #Kommentar nur am Nachmittag
                    try:
                        url = urlbase + nendo + "_" + str(s) + "/" + nendo + season[s] + "_fe_" + t + "_cmnt.pdf"
                        filename = nendo + season[s] + "_fe_" + t + "_cmnt.pdf"
                        urllib.request.urlretrieve(url,"{0}".format(filename))
                    except urllib.error.HTTPError:
                        print("Error: " + filename) #Dateinamen anzeigen, die nicht heruntergeladen werden konnten
                for qa in ["qs","ans"]:
                    try:
                        url = urlbase + nendo + "_" + str(s) + "/" + nendo + season[s] + "_fe_" + t + "_" + qa + ".pdf"
                        filename = nendo + season[s] + "_fe_" + t + "_" + qa + ".pdf"
                        urllib.request.urlretrieve(url,"{0}".format(filename))
                    except urllib.error.HTTPError:
                        print("Error: " + filename) #Dateinamen anzeigen, die nicht heruntergeladen werden konnten

if __name__ == "__main__":
    download()

Wenn das oben Gesagte ausgeführt wird, wird die PDF-Datei abgerufen und die folgende Fehlermeldung angezeigt (Stand 30. Dezember 2019).

Error: 2011h23h_fe_am_qs.pdf
Error: 2011h23h_fe_am_ans.pdf
Error: 2011h23h_fe_pm_cmnt.pdf
Error: 2011h23h_fe_pm_qs.pdf
Error: 2011h23h_fe_pm_ans.pdf
Error: 2019h31a_fe_am_qs.pdf
Error: 2019h31a_fe_am_ans.pdf
Error: 2019h31a_fe_pm_cmnt.pdf
Error: 2019h31a_fe_pm_qs.pdf
Error: 2019h31a_fe_pm_ans.pdf

Dies ist auf die folgenden zwei Tatsachen zurückzuführen.

Es ist erforderlich, das obige Programm manuell herunterzuladen oder neu zu schreiben, um frühere Fragen des Jahres und der Zeit zu erhalten, in der ein Fehler aufgetreten ist, dh eine Programmausnahme. Zum Beispiel hat der Autor das folgende Programm verwendet.

kakomon_revised.py


import urllib.request

def download():
    #Gemeinsamer (erste Hälfte) Teil der Sonderprüfung 2011 und URL der Herbstprüfung 2019 und gemeinsamer Teil des Dateinamens
    urlbase = {"https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2011h23_1/2011h23tokubetsu_fe_":"2011h23tokubetsu_fe_",
               "https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2019h31_2/2019r01a_fe_":"2019r01a_fe_"}

    #Laden Sie das PDF (Fragen / Antworten / Kommentare) für die Sonderprüfung 2011 und die Herbstprüfung 2019 herunter
    for u in urlbase:
        for t in ["am","pm"]:
            if t == "pm":   #Kommentar nur am Nachmittag
                try:
                    url = u + t + "_cmnt.pdf"
                    filename = urlbase[u] + t + "_cmnt.pdf"
                    urllib.request.urlretrieve(url,"{0}".format(filename))
                except urllib.error.HTTPError:
                    print("Error: " + filename) #Dateinamen anzeigen, die nicht heruntergeladen werden konnten
            for qa in ["qs","ans"]:
                try:
                    url = u + t + "_" + qa + ".pdf"
                    filename = urlbase[u] + t + "_" + qa + ".pdf"
                    urllib.request.urlretrieve(url,"{0}".format(filename))
                except urllib.error.HTTPError:
                    print("Error: " + filename) #Dateinamen anzeigen, die nicht heruntergeladen werden konnten

if __name__ == "__main__":
    download()

Beiseite

Es gibt eine Änderung in der Nachmittagsprüfung ab dem 2. Jahr von Reiwa, und die Programmiersprache scheint [COBOL wird abgeschafft und Python hinzugefügt] zu sein (https://www.ipa.go.jp/about/press/20190124.html). Die Anzahl der Fragen, die Anzahl der Antworten, die zugewiesenen Punkte usw. ändern sich ebenfalls.

Referenz

Recommended Posts

Die Geschichte des sofortigen Herunterladens des PDF-Dokuments der grundlegenden Information Engineer-Prüfung mit Python
[Basic Information Engineer Examination] Ich habe den Algorithmus der euklidischen Methode der gegenseitigen Teilung in Python geschrieben.
[Basic Information Engineer Examination] Ich habe einen linearen Suchalgorithmus in Python geschrieben.
[Basic Information Engineer Examination] Ich habe einen Algorithmus für den Maximalwert eines Arrays in Python geschrieben.
Grundlegende Information Engineer-Prüfung (FE) Nachmittagsprüfung Python-Beispielfrage Erläuterung
Erfahrung in der Prüfung zum Ingenieur für angewandte Informationstechnologie
Ein Memorandum über die Umsetzung von Empfehlungen in Python
Eine Geschichte über den Versuch, Linter mitten in einem Python (Flask) -Projekt vorzustellen
[Basic Information Engineer Examination] Ich habe einen Algorithmus zur Bestimmung des Jahres der Schwellung in Python geschrieben.
Die Geschichte der Verarbeitung A von Blackjack (Python)
Holen Sie sich den Aufrufer einer Funktion in Python
Kopieren Sie die Liste in Python
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
Ausgabe in Form eines Python-Arrays
Zusammenfassung des grundlegenden Sortieralgorithmus von Python (Prüfung zum Basic Information Engineer)
Zip 4 Gbyte Problem ist eine Geschichte der Vergangenheit
Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus
Eine Geschichte darüber, wie man einen relativen Pfad in Python angibt.
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
[Hinweis] Import von Dateien in das übergeordnete Verzeichnis in Python
Eine Geschichte über den Versuch, private Variablen in Python zu implementieren.
Die Geschichte, wie man mit discord.py einen Fragenkasten-Bot erstellt
Die Geschichte des Erstellens eines Bots, der aktive Mitglieder in einem bestimmten Slack-Kanal mit Python anzeigt
Über die Funktionen von Python
So bestimmen Sie die Existenz eines Selenelements in Python
So überprüfen Sie die Speichergröße einer Variablen in Python
Lesen Sie die Standardausgabe eines Unterprozesses zeilenweise in Python
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
Ein Memorandum zum Erwerb der Grundprüfung für die Python3-Ingenieurzertifizierung
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
Zählen Sie, wie oft zwei Werte gleichzeitig in einem Element vom Typ Python 3-Iterator angezeigt werden
Eine Geschichte über den Versuch, den Testprozess eines 20 Jahre alten Systems in C zu verbessern
Eine Geschichte über das Erstellen eines Programms, mit dem die Anzahl der Instagram-Follower in einer Woche von 0 auf 700 erhöht wird