[PYTHON] Scraping der veröffentlichten CSV mit Github Action und Veröffentlichung auf Github Pages

Einführung

Über dieses Programm

Offene Daten (CSV) aus der Präfektur Gifu, ・ Regelmäßiges Schaben mit Github-Aktionen

Hintergrund der Veröffentlichung

Dieses Programm wurde für die Entwicklung der Corona Antivirus-Site der Präfektur Gifu entwickelt. Obwohl es in anderen Fällen veröffentlicht wird, ist die Verarbeitung in der csv-> json-Ausgabe enthalten, und das ist es auch Viele Korrekturen wurden als Referenz benötigt. Daher wird in diesem Programm die Verarbeitung auf ein Minimum beschränkt, und die ursprünglichen CSV-Daten können in einem Format ausgegeben werden, das anderen Entwicklern die Entwicklung erleichtert.

Product Github https://github.com/CODE-for-GIFU/covid19-scraping

Json-Ausgabe auf Github-Seiten

http://code-for-gifu.github.io/covid19-scraping/patients.json http://code-for-gifu.github.io/covid19-scraping/testcount.json http://code-for-gifu.github.io/covid19-scraping/callcenter.json http://code-for-gifu.github.io/covid19-scraping/advicecenter.json

Referenz-CSV-Datei

Open Data der Präfektur Gifu https://data.gifu-opendata.pref.gifu.lg.jp/dataset/c11223-001

how to use

Lauf auf Github

Startmethode

Wie man aufhört

main.yml


on:
  schedule:
    - cron: "*/10 * * * *”

Hosting auf Github-Seiten

Einzelheiten finden Sie im offiziellen Dokument der Github-Aktion. https://help.github.com/ja/actions

In lokaler Umgebung ausführen

pip install -r requirements.txt
python3 main.py

Eine json-Datei wird im Ordner / data generiert.

Technische Dokumentation

python

Maine

main.py


os.makedirs('./data', exist_ok=True)
for remotes in REMOTE_SOURCES:
    data = import_csv_from(remotes['url'])
    dumps_json(remotes['jsonname'], data)

Datendefinitionsteil

settings.py


#Externe Ressourcendefinition
REMOTE_SOURCES = [
    {
        'url': 'https://opendata-source.com/source1.csv',
        'jsonname': 'source1.json',
    },
    {
        'url': 'https://opendata-source.com/source2.csv',
        'jsonname': 'source2.json',
    },
    {
        'url': 'https://opendata-source.com/source3.csv',
        'jsonname': 'source3.json',
    },
    {
        'url': 'https://opendata-source.com/source4.csv',
        'jsonname': 'source4.json',
    }
]

CSV-Leseteil

main.py


def import_csv_from(csvurl):
    request_file = urllib.request.urlopen(csvurl)
    if not request_file.getcode() == 200:
        return

    f = decode_csv(request_file.read())
    filename = os.path.splitext(os.path.basename(csvurl))[0]
    datas = csvstr_to_dicts(f)
    timestamp = (request_file.getheader('Last-Modified'))

    return {
        'data': datas,
        'last_update': dateutil.parser.parse(timestamp).astimezone(JST).isoformat()
    }

CSV-Dekodierungsteil

main.py


def decode_csv(csv_data):
    print('csv decoding')
    for codec in CODECS:
        try:
            csv_str = csv_data.decode(codec)
            print('ok:' + codec)
            return csv_str
        except:
            print('ng:' + codec)
            continue
    print('Appropriate codec is not found.')

csv → json Datenkonvertierungseinheit

main.py


def csvstr_to_dicts(csvstr):
    datas = []
    rows = [row for row in csv.reader(csvstr.splitlines())]
    header = rows[0]
    for i in range(len(header)):
        for j in range(len(UNUSE_CHARACTER)):
            header[i] = header[i].replace(UNUSE_CHARACTER[j], '')

    maindatas = rows[1:]
    for d in maindatas:
        #Leerzeilen überspringen
        if d == []:
            continue
        data = {}
        for i in range(len(header)):
            data[header[i]] = d[i]
        datas.append(data)
    return datas

json Datenausgabeabschnitt

main.py


def dumps_json(file_name: str, json_data: Dict):
    with codecs.open("./data/" + file_name, "w", "utf-8") as f:
        f.write(json.dumps(json_data, ensure_ascii=False,
                           indent=4, separators=(',', ': ')))

Github Action Es wird mit einer yml-Datei erstellt.

Zeitplan

main.yml


on:
    schedule:
     - cron: "*/10 * * * *”

Python-Skript-Ausführungsteil

main.yml


    steps:
      - uses: actions/checkout@v2
      - name: Set up Python 3.8
        uses: actions/setup-python@v1
        with:
          python-version: 3.8
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
      - name: Run script
        run: |
          python main.py

auf gh-seiten drücken

main.yml


      - name: deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./data
          publish_branch: gh-pages

Verweise

Hokkaido: Python-Skript zum Scraping --covid19hokkaido_scraping https://github.com/Kanahiro/covid19hokkaido_scraping/blob/master/main.py

Recommended Posts

Scraping der veröffentlichten CSV mit Github Action und Veröffentlichung auf Github Pages
Lesen Sie die CSV-Datei mit dem Jupiter-Notizbuch und schreiben Sie die Grafik übereinander
Prognostizieren Sie den Stromverbrauch in 2 Tagen und veröffentlichen Sie ihn in CSV
Extrahieren Sie das Ergebnis des TOP-Befehls mit USER und geben Sie es als CSV aus
Konvertieren Sie eine Tabelle in CSV und laden Sie sie mit Cloud-Funktionen in den Cloud-Speicher hoch
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 3 sichtbar
Schaben Sie den Holojour ab und zeigen Sie ihn in der CLI an
Bis die Sphinx-Dokumentation auf GitHub veröffentlicht wird
Der Typ, der gestolpert ist, als Pelican seinen Blog nicht auf Github-Seiten veröffentlichen konnte
Installieren Sie Selenium auf Ihrem Mac und probieren Sie es mit Python aus
Lesen Sie die CSV-Datei und zeigen Sie sie im Browser an
POST das Bild mit json und erhalte es mit der Flasche
Holen Sie sich die passende Zeichenfolge in den regulären Ausdruck und verwenden Sie sie beim Ersetzen unter Python3 erneut
Setzen Sie Ubuntu in Raspi ein, setzen Sie Docker darauf und steuern Sie GPIO mit Python aus dem Container
Erstellen Sie eine neue CSV mit Pandas basierend auf der lokalen CSV
Spielen Sie mit dem Passwortmechanismus von GitHub Webhook und Python
Lebensspiel mit Python [ich habe es geschafft] (auf Terminal & Tkinter)
Nehmen Sie ein Bild mit Pepper auf und zeigen Sie es auf Ihrem Tablet an
Verkleide das Gras auf GitHub und versuche Ingenieur zu werden.
Installieren Sie lp_solve unter Mac OSX und rufen Sie es mit Python auf.
Ich habe GhostScript mit Python ausgeführt, das PDF in Seiten aufgeteilt und es in ein JPEG-Bild konvertiert.
Laden Sie Daten mit einem Befehl und einer Aktualisierung auf s3 von aws hoch und löschen Sie die verwendeten Daten (unterwegs).