Python-Skript zum Abrufen einer Liste von Eingabebeispielen für den AtCoder-Wettbewerb

Quellcode

Klicken Sie hier für Gist https://gist.github.com/029969994cb444bef7ed

# -*- coding: utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
import sys
import os
import re
'''
Wenn Sie die URL der Wettbewerbsseite übergeben, befindet sie sich im Ausführungsverzeichnis
Erstellen eines Verzeichnisses für jedes Problem,Geben Sie das Beispiel für die Eingabe der Problemseite in eine Datei aus
'''

INPUT_FILE_NAME = "input.txt"
DELIMITER = "---"


def main():
    # http://arc001.contest.atcoder.jp/
    try:
        url = sys.argv[1]
    except IndexError:
        print("input contest url:")
        url = input()

    m = re.search('(https?://)(?P<name>.*)\.contest?', url)
    contest_name = m.group('name')
    if not os.path.exists(contest_name):
        os.mkdir(contest_name)
    page = urlopen(url + "assignments")
    soup = BeautifulSoup(page)
    table = soup.find('table', attrs={'class': 'table-wb'}).find('tbody')
    for tr in table.find_all('tr'):
        (sharptd, qlinktd) = tr.find_all('td', limit=2)
        index = sharptd.text
        q_path = contest_name + "/" + index
        if not os.path.exists(q_path):
            os.mkdir(q_path)
        url_tail = qlinktd.find('a').get('href')
        f_path = q_path + "/" + INPUT_FILE_NAME
        if not os.path.exists(f_path):
            f = open(f_path, "w")
            f.write(soup_prets(url + url_tail[1:]))
            f.close()
            print("generate input > " + f_path)
        else:
            print("already exists: f_path")


def soup_prets(url):
    '''
Eingabetext abrufen
    '''

#    print(url)
    page = urlopen(url)
    soup = BeautifulSoup(page)
    inputs = []
    for pretag in soup.find_all("pre", attrs={"class": "prettyprint"})[::2]:
        inputs.append(pretag.string.strip())
    return ("\n" + DELIMITER + "\n").join(inputs)

if __name__ == '__main__':
    main()

Vorbereitung

Benötigt Python3, BeautifulSoup4

pip install beautifulsoup4 

Ausführungsbeispiel

Versuchen Sie es im Wettbewerb unter http://arc001.contest.atcoder.jp/

> ls
start.py

Skript ausführen

> ./start.py http://arc001.contest.atcoder.jp/
generate input > arc001/A/input.txt
generate input > arc001/B/input.txt
generate input > arc001/C/input.txt
generate input > arc001/D/input.txt

Verzeichnisstruktur nach Ausführung

> tree
.
├── arc001
│   ├── A
│   │   └── input.txt
│   ├── B
│   │   └── input.txt
│   ├── C
│   │   └── input.txt
│   └── D
│       └── input.txt
└── start.py

5 directories, 5 files

Überprüfen Sie, was generiert wurde

> cat arc001/A/input.txt
9
131142143
---
20
12341234123412341234
---
4
1111

Recommended Posts

Python-Skript zum Abrufen einer Liste von Eingabebeispielen für den AtCoder-Wettbewerb
Python: Ruft eine Liste der Methoden für ein Objekt ab
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
Versuchen Sie, die Funktionsliste des Python> os-Pakets abzurufen
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
So erhalten Sie eine Liste der integrierten Ausnahmen für Python
Versuchen Sie, die Thread-Liste der Nachrichten (Abneigung) mit Python zu erhalten.
Ruft den Wert eines bestimmten Schlüssels bis zum angegebenen Index der Wörterbuchliste in Python ab
[OCI] Python-Skript zum Abrufen der IP-Adresse einer Recheninstanz in Cloud Shell
Nachdem Sie mit Python auf die Qiita-API geklickt haben, um eine Liste mit Artikeln für Anfänger zu erhalten, werden wir die Artikel von God besuchen
[Python] Nur eine Liste der Ordner abrufen
[Python] Ein Programm, das den Inhalt der Liste nach links dreht
Python> sys.path> Liste der Zeichenfolgen, die den Pfad für die Suche nach Modulen angeben
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
[Linux] Ein Befehl zum Abrufen einer Liste der in der Vergangenheit ausgeführten Befehle
Holen Sie sich den Aufrufer einer Funktion in Python
Kopieren Sie die Liste in Python
Python Amateur versucht die Liste zusammenzufassen ②
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python
Atcoder-Anfängerwettbewerb A, B Zusammenfassung der Eingabe, die tendenziell ein Problem für Python darstellt
Ich habe ein Skript erstellt, das das aktive Fenster mit win32gui von Python aufzeichnet
Vorlage des Python-Skripts zum Lesen des Inhalts der Datei
So ermitteln Sie die Anzahl der Stellen in Python
[Python] Ruft die Liste der im Modul definierten Klassen ab
Holen Sie sich den Rückkehrcode eines Python-Skripts von bat
[Python] Ruft die Liste der ExifTags-Namen der Pillow-Bibliothek ab
[Maya Python] Crush den Inhalt des Skripts 2 ~ Liste Notizen
Skript zum Abrufen des Ablaufdatums des SSL-Zertifikats
Python Hinweis: Das Rätsel, einer Variablen eine Variable zuzuweisen
Ein Python-Skript, das die Anzahl der Jobs für eine bestimmte Bedingung von Indeed.com abruft
So überprüfen Sie in Python, ob sich eines der Elemente einer Liste in einer anderen Liste befindet
AtCoder Anfängerwettbewerb 166 A Erklärung des Problems "A? C" (Python3, C ++, Java)
[Python] So erstellen Sie eine Liste von Zeichenfolgen Zeichen für Zeichen
Rückblick auf den AtCoder Beginner Contest 159 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 163 bis Frage E (Python)
So mischen Sie einen Teil der Python-Liste (at random.shuffle)
[Maya Python] Crush den Inhalt des Skripts 3 ~ Liste unbekannter Plugins
Rückblick auf den AtCoder Beginner Contest 164 bis Frage E (Python)
[Befehl] Befehl zum Abrufen einer Liste von Dateien mit Zeichen voller Breite
Rückblick auf den AtCoder Beginner Contest 162 bis Frage E (Python)
Holen Sie sich eine Liste der mit Python + Selen gekauften DMM-E-Books
Discords Python 1.5 oder höher, ich kann keine Liste der Mitglieder erhalten
Rückblick auf den AtCoder Beginner Contest 154 bis Frage E (Python)
AtCoder Grand Contest 046: A --Takahashikun, The Strider Animationszeichnung
Ermitteln Sie die Anzahl der Vorkommen für jedes Element in der Liste
Rückblick auf den AtCoder Beginner Contest 160 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 167 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 157 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 161 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 155 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 156 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 166 bis Frage E (Python)
So erhalten Sie eine Liste mit Links von einer Seite aus Wikipedia
Python-Skript, das den Inhalt zweier Verzeichnisse vergleicht
Holen Sie sich die Quelle der Seite unbegrenzt mit Python zu laden.
So verbinden Sie den Inhalt der Liste mit einer Zeichenfolge