L'histoire du téléchargement de la dernière question PDF de l'examen d'ingénieur d'information de base avec Python à la fois

Aperçu

Téléchargez le PDF de la question précédente de Basic Information Engineer Examination (FE) en utilisant le package urllib de Python.

Détails

Les dernières questions de l'examen d'ingénieur en information de base sont [publiées] sur le site Web officiel de l'IPA (https://www.jitec.ipa.go.jp/1_04hanni_sukiru/_index_mondai.html). Cependant, des questions et réponses sont publiées pour chaque année, et vous devez vous rendre sur la page de chaque année et les télécharger. Pour éviter ce problème, utilisez le package urllib de Python pour télécharger des questions et des réponses à la fois.

Recherchez l'URL

En regardant les pages publiées dans les questions précédentes, par exemple, l'URL de l'examen du printemps 2015 est la suivante.

La structure de l'URL de la question précédente est https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_ En plus de [Calendrier occidental] [Calendrier japonais] _ [1 OU 2] / [Calendrier occidental] [Calendrier japonais] [h OU a] _fe_ [am OU pm] _ [qs OR ans OU cmnt] .pdf On peut voir que

la mise en oeuvre

J'ai écrit le code en utilisant beaucoup d'instructions for sans trop réfléchir.

kakomon.py


import urllib.request

def download():
    #Partie commune (première moitié) de l'URL
    urlbase = "https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_"
    
    #Printemps et automne
    season = {1:"h", 2:"a"}
    
    # 2009-Téléchargez le PDF 2019 (questions / réponses / commentaires)
    for y in range(2009,2020):
        nendo = str(y) + "h" + str(y - 1988)  #Exemple: 2009h21
        for s in range(1,3):
            for t in ["am","pm"]:
                if t == "pm":   #Commentaire uniquement l'après-midi
                    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) #Afficher les noms de fichiers qui n'ont pas pu être téléchargés
                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) #Afficher les noms de fichiers qui n'ont pas pu être téléchargés

if __name__ == "__main__":
    download()

Lorsque ce qui précède est exécuté, le fichier PDF est obtenu et le message d'erreur suivant s'affiche (au 30 décembre 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

Cela est dû aux deux faits suivants.

Il est nécessaire de télécharger ou de réécrire manuellement le programme ci-dessus pour obtenir les questions précédentes de l'année et du moment où une erreur s'est produite, c'est-à-dire une exception de programme. Par exemple, l'auteur a utilisé le programme suivant.

kakomon_revised.py


import urllib.request

def download():
    #Partie commune (première moitié) de l'examen spécial 2011 et URL de l'examen d'automne 2019 et partie commune du nom de fichier
    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_"}

    #Téléchargez le PDF (questions, réponses, commentaires) pour l'examen spécial 2011 et l'examen d'automne 2019
    for u in urlbase:
        for t in ["am","pm"]:
            if t == "pm":   #Commentaire uniquement l'après-midi
                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) #Afficher les noms de fichiers qui n'ont pas pu être téléchargés
            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) #Afficher les noms de fichiers qui n'ont pas pu être téléchargés

if __name__ == "__main__":
    download()

De côté

Il y a un changement dans l'examen de l'après-midi par rapport à la 2ème année de Reiwa, et le langage de programmation semble être COBOL est aboli et Python est ajouté. Le nombre de questions, le nombre de réponses, les points attribués, etc. changeront également.

référence

Recommended Posts

L'histoire du téléchargement de la dernière question PDF de l'examen d'ingénieur d'information de base avec Python à la fois
[Examen d'ingénieur d'information de base] J'ai écrit l'algorithme de la méthode de division mutuelle euclidienne en Python.
[Examen d'ingénieur d'information de base] J'ai écrit un algorithme de recherche linéaire en Python.
[Examen d'ingénieur d'information de base] J'ai écrit un algorithme pour la valeur maximale d'un tableau en Python.
Examen d'ingénieur en information de base (FE) Examen de l'après-midi Exemple de question Python Explication
Expérience de passer l'examen d'ingénieur en technologie de l'information appliquée
Un mémorandum sur la mise en œuvre des recommandations en Python
Une histoire sur la tentative d'introduire Linter au milieu d'un projet Python (Flask)
[Examen d'ingénieur d'information de base] J'ai écrit un algorithme pour déterminer l'année de gonflement en Python.
L'histoire du traitement A du blackjack (python)
Récupérer l'appelant d'une fonction en Python
Copiez la liste en Python
Écrire une note sur la version python de python virtualenv
Sortie sous la forme d'un tableau python
Résumé de l'algorithme de tri de base python (examen d'ingénieur d'information de base)
Le problème Zip 4 Gbyte est une histoire du passé
Découvrez la largeur apparente d'une chaîne en python
Une histoire sur la façon de spécifier un chemin relatif en python.
Obtenez le nombre d'éléments spécifiques dans la liste python
[Note] Importation de fichiers dans le répertoire parent en Python
Une histoire sur la tentative d'implémentation de variables privées en Python.
L'histoire de la création d'un bot de boîte à questions avec discord.py
L'histoire de la création d'un Bot qui affiche les membres actifs dans un canal spécifique de Slack avec Python
À propos des fonctionnalités de Python
Comment déterminer l'existence d'un élément sélénium en Python
Comment vérifier la taille de la mémoire d'une variable en Python
Lire la sortie standard d'un sous-processus ligne par ligne en Python
Une fonction qui mesure le temps de traitement d'une méthode en python
Un mémorandum concernant l'acquisition de l'examen de base de certification d'ingénieur Python3
L'histoire de la création d'un module qui ignore le courrier avec python
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
Comptez le nombre de fois que deux valeurs apparaissent simultanément dans un élément de type itérateur Python 3
Une histoire d'essayer d'améliorer le processus de test d'un système vieux de 20 ans écrit en C
Une histoire sur la création d'un programme qui augmentera le nombre d'abonnés Instagram de 0 à 700 en une semaine