[PYTHON] Strategie, um lokale Schabearbeiten an GCP zu bringen (Teil 1)

Was du machen willst

Derzeit auf einem lokalen PC ① Scraping auf eine Website mit Selenium in Python (2) Sammeln Sie Scraping-Ergebnisse in einer Protokolldatei ③ Regelmäßige Ausführung mit CRON tun

クリックツールGCP移行.png Ich möchte dies in der GCP-Umgebung erstellen, die die Cloud ist クリックツールGCP移行 (1).png Wahrscheinlich Die Python-Ausführungsumgebung ist ** Google Cloud Functions (GCF) ** ** Google Cloud Storage ** oder ** Google Drive ** zum Speichern von Protokolldateien Die geplante Ausführung ist ** Google Cloud Scheduler ** Sollte durch diese ersetzt werden!

Hintergrund

Drei. ① ** Ich wollte GCP verwenden. ** AWS war in Ordnung, aber irgendwie. ② Ich werde im Ausland studieren, also wollte ich meinen PC nicht eingeschaltet lassen. ** Die Stadt, in der ich lebe, ist im Sommer heiß ~~ shit ~~, also dachte ich, es wäre eine schwere Belastung, den PC zu betreiben. Es gibt viele Gewitter, deshalb mache ich mir Sorgen um Stromausfälle. Wenn Sie danach in die Cloud wechseln, scheint es einfach zu sein, Sushi zu verwalten und zu warten, wo immer Sie sind. ③ ** Ich machte mir Sorgen um die Stromrechnung. ** Ich benutze [iMac Stromrechnung ist ungefähr 60 Yen pro Tag](https://web.waytoearnmoney.org/2015/03/03/imac%E3%82%B9%E3%83%AA%E3 % 83% BC% E3% 83% 97% E6% 99% 82% E3% 81% AE% E5% BE% 85% E6% A9% 9F% E9% 9B% BB% E5% 8A% 9B% E3% 81 % A8% E9% 9B% BB% E6% B0% 97% E4% BB% A3% E3% 81% AF% E3% 81% A9% E3% 82% 8C% E3% 81% 8F% E3% 82% 89 % E3% 81% 84% EF% BC% 9F /) (wahrscheinlich). Es ist 1800 Yen pro Monat. Auf der anderen Seite hat GCF eine kostenlose Stufe. Das Scraping wird alle 5 Minuten durchgeführt. Passt wahrscheinlich bequem. Mit anderen Worten, es ist kostenlos.

Speisekarte

Die folgenden drei Hauptaufgaben sind erforderlich ① GCF-Migration programmieren ② Geplante Ausführungseinstellungen ③ Protokollspeicher Also diesmal bis "Programm GCF Migration"

Über GCF

Unter den vielen Google Cloud-Diensten, diesmal außer Cloud-Funktionen ・ Starten Sie einen PC in einer Cloud-Umgebung mit Compute Engine ・ Verwenden Sie Cloud Run, um alles in den Container zu legen und auszuführen. Es wurde untersucht Der Grund für die Einführung von Cloud-Funktionen ist Compute Engine kostet Geld, um eine Instanz zu starten und sie alle 5 Minuten auszuführen. Reicht Cloud Run aus, um einen Container zu erstellen? Ich dachte, dass es anders ist, weil ich verstanden habe, dass der Zweck von Cloud Run darin besteht, zunächst vollständig abgeschlossene Apps auszuführen. Wenn Sie falsch verstehen, sagen Sie mir eine erotische Person

Programmieren Sie die GCF-Migration

GCP-Registrierung, GCF-Grundeinstellungen

Es gibt so viele Artikel, dass es verrottet, also google!

Ablauf von der Herstellung von Selen usw. bis zum Einsatz und Testen

Diese Seite war hilfreich für mich. ** Vielen Dank ** Starten Sie zunächst Cloud Shell über die Schaltfläche ganz links in der Schaltflächengruppe oben rechts auf dem Bildschirm. スクリーンショット 2020-05-16 0.34.16.png Führen Sie den folgenden Befehl aus, wenn er gestartet werden kann.

#Klon von God Git, der nützliche Tools wie Webdriver zusammenstellt
git clone https://github.com/ryfeus/gcf-packs.git
#Bewegung
cd gcf-packs/selenium_chrome/source
#Auftauen
unzip headless-chromium.zip
#Vorerst bereitstellen(Ein Programm, das zufällig auf das Wiki zugreift und den Seitentitel abruft)
gcloud functions deploy handler --runtime python37 --trigger-http --region asia-northeast1 --memory 512MB

Klicken Sie hier, um die Bereitstellungsoptionen anzuzeigen Unterwegs

Allow unauthenticated invocations of new function [handler]? (y/N)?

Wird angezeigt, geben Sie "y" ein. Wenn Sie den Trigger http kennen, dh die nach der Bereitstellung ausgegebene URL, kann sie auch ein Fremder ausführen, insbesondere, weil diese Person (im Fall meines Programms) keinen Vorteil hat, wenn sie von einer anderen Person ausgeführt wird Es sollte kein Problem geben (wenn die Person es jedoch 100 Millionen Mal böswillig ausführt, ist die Nutzungsgebühr hoch und ich werde sterben).

Dann wird es mit dem Namenhandler wie folgt auf dem Bildschirm angezeigt. スクリーンショット 2020-05-16 0.46.26.png Gehen Sie zurück zu Cloud Shell

Deploying function (may take a while - up to 2 minutes)...done.
availableMemoryMb: 256
entryPoint: handler
httpsTrigger:
  url: https://asia-northeast1-************.cloudfunctions.net/handler
ingressSettings: ALLOW_ALL
labels:

Kopieren Sie den https ~ -Teil von

curl https://asia-northeast1-************.cloudfunctions.net/handler

Gibt den Titel einer Seite von WIki zurück. Mit Ausnahme der Konsole können Sie dies auch tun, indem Sie auf dem Bildschirm auf "Handler", am Übergangsziel auf "Test" und auf "Testen der Funktion" klicken. Der ursprüngliche Code lautet "main.py" im selben Verzeichnis. Wenn Sie ein anderes Tool als Chromedriver oder Headless-Chrom verwenden, müssen Sie es selbst mitbringen (das, das durch Importieren mit Python verwaltet werden kann, sollte in Ordnung sein).

Sie müssen lediglich den Inhalt von "main.py" in den lokal verwendeten Code umschreiben. Beim Schreiben von Code ist es praktisch, "Editor öffnen" auf dem Bildschirm zu verwenden, auf dem Cloud Shell gestartet wird. スクリーンショット 2020-05-16 1.12.13.png

Nach dem erneuten Schreiben des Codes

gcloud functions deploy *** --runtime python37 --trigger-http --region asia-northeast1 --memory 512MB

Machen. Beachten Sie, dass *** nach der Bereitstellung zu einem Fehler führt, wenn er nicht mit dem Funktionsnamen in main.py übereinstimmt. Testen Sie es und wenn es kein Problem gibt, ist es geschafft! !! Danke für deine harte Arbeit.

wichtiger Punkt

Informationen zur Speichergröße

Chrom frisst unerwartet Speicher auf. Klicken Sie auf den Namen der bereitgestellten Funktion, um zum Detailbildschirm zu gelangen. Screenshot 2020-05-18 16.38.14.png Sie können die Speichernutzung im Pulldown-Menü "Allgemein" überprüfen. Wenn das Verhalten seltsam ist, ändern Sie die Speichergröße.

Worauf ich beim Umschreiben achten möchte

    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    chrome_options.add_argument('--window-size=1280x1696')
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument('--hide-scrollbars')
    chrome_options.add_argument('--enable-logging')
    chrome_options.add_argument('--log-level=0')
    chrome_options.add_argument('--v=99')
    chrome_options.add_argument('--single-process')
    chrome_options.add_argument('--ignore-certificate-errors')

Löschen Sie diese nicht. Es funktioniert nicht. Selbst wenn Sie sich den offiziellen Web-Treiber ansehen, wird nicht erwähnt, welches Argument welche Bedeutung hat. Wenn Sie also die entsprechende Seite kennen, lassen Sie es mich bitte wissen.

Nachwort

Ich erhalte während des Tests eine Fehlermeldung wie das Bild, aber es ist ein Rätsel, dass das Protokoll bis zum Ende ordnungsgemäß ausgeführt und ausgegeben wird. Hmmm. .. .. スクリーンショット 2020-05-16 1.23.21.png

Nachtrag

Ich verstehe den Grund für den obigen Fehler! !! Öffnen Sie eine neue Registerkarte, um beim Scraping einen Link zu öffnen

key_down(Keys.CONTROL).click().key_up(Keys.CONTROL)

Was zu tun ist wurde auf Schlüssel gesetzt. ** BEFEHL **, da die lokale Umgebung Mac war. GCF ist die Ausführungsumgebung von Python ist Ubuntu.

nächstes Mal

Das nächste Mal wird ~~ Jonouchi sterben, Duel Standby! ~~ Es ist eine Einstellung für die geplante Ausführung, also freuen Sie sich bitte darauf!

Recommended Posts

Strategie, um lokale Schabearbeiten an GCP zu bringen (Teil 1)
[Teil1] Scraping mit Python → Organisieren Sie bis zu CSV!
Python) Speichern Sie Scraping-Inhalte auf dem lokalen PC
Python: Scraping Teil 1
Python: Scraping Teil 2