[PYTHON] Stratégie pour intégrer le travail de scraping local à GCP (partie 1)

Chose que tu veux faire

Actuellement sur un PC local ① Scraping vers un site Web en utilisant Selenium en Python (2) Accumuler les résultats de grattage dans un fichier journal ③ Exécution régulière avec CRON faites

クリックツールGCP移行.png Je souhaite créer cela dans l'environnement GCP qu'est le cloud クリックツールGCP移行 (1).png Probablement L'environnement d'exécution Python est ** Google Cloud Functions (GCF) ** ** Google Cloud Storage ** ou ** Google Drive ** pour stocker les fichiers journaux L'exécution planifiée est ** planificateur Google Cloud ** Doit être remplacé par ceux-ci!

Contexte

Trois. ① ** Je voulais utiliser GCP. ** AWS allait bien, mais d'une manière ou d'une autre. ② Je vais étudier à l'étranger, donc je ne voulais pas laisser mon ordinateur allumé. ** La ville dans laquelle je vis est chaud en été ~~ merde ~~, alors j'ai pensé que ce serait un lourd fardeau de faire fonctionner le PC. Je m'inquiète des coupures de courant car il y a de nombreux orages. Après cela, si vous passez au cloud, il semble facile de gérer et de maintenir où que vous soyez, sushi. ③ ** J'étais inquiet pour la facture d'électricité. ** J'utilise [la facture d'électricité de l'iMac est d'environ 60 yens par jour](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% FE% BC% 9F /) (probable). C'est 1800 yens par mois. D'autre part, GCF a un niveau gratuit. Le grattage est effectué toutes les 5 minutes. Convient probablement confortablement. En d'autres termes, c'est gratuit.

menu

Les trois tâches principales suivantes sont requises ① Migration du programme GCF ② Paramètres d'exécution programmée ③ Stockage des journaux Donc, cette fois, jusqu'à "Programmer la migration du GCF"

À propos de GCF

Parmi les nombreux services Google Cloud, autres que Cloud Functions cette fois ・ Lancez un PC dans un environnement cloud avec Compute Engine -Exécuter avec Cloud Run Il a été étudié La raison de l'adoption de Cloud Functions est Compute Engine coûte de l'argent pour lancer une instance en permanence et l'exécuter une fois toutes les 5 minutes, Cloud Run est-il suffisant pour créer un conteneur? J'ai pensé que c'était différent parce que j'ai compris que le but de Cloud Run est d'exécuter temporairement une application plus complète en premier lieu. Si vous vous méprenez, dites-moi une personne érotique

Migration du programme GCF

Enregistrement GCP, paramètres initiaux GCF

Il y a tellement d'articles que ça pourrit, alors google!

Flux de la préparation du sélénium, etc. au déploiement et aux tests

Ce site m'a été utile. ** Merci beaucoup ** Tout d'abord, démarrez Cloud Shell à partir du bouton le plus à gauche dans le groupe de boutons en haut à droite de l'écran. スクリーンショット 2020-05-16 0.34.16.png Exécutez la commande suivante lorsqu'elle peut être démarrée.

#Clone de God Git qui met en place des outils utiles tels que webdriver
git clone https://github.com/ryfeus/gcf-packs.git
#Bouge toi
cd gcf-packs/selenium_chrome/source
#Dégivrer
unzip headless-chromium.zip
#Déployer pour le moment(Un programme qui accède au Wiki de manière aléatoire et récupère le titre de la page)
gcloud functions deploy handler --runtime python37 --trigger-http --region asia-northeast1 --memory 512MB

Cliquez ici pour les options de déploiement En chemin

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

S'affiche, entrez "y". Si vous connaissez le déclencheur http, c'est-à-dire l'URL émise après le déploiement, même un inconnu peut l'exécuter, mais surtout parce qu'il n'y a aucun avantage (dans le cas de mon programme) à cette personne lorsqu'il est exécuté par une autre personne Il ne devrait y avoir aucun problème (bien que si la personne l'exécute de manière malveillante 100 millions de fois, les frais d'utilisation seront élevés et je mourrai).

Ensuite, il sera affiché à l'écran avec le gestionnaire de nom comme celui-ci. スクリーンショット 2020-05-16 0.46.26.png Revenir à 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:

Copiez la partie https ~ de

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

Retournera le titre d'une page de WIki. De plus, à l'exception de la console, vous pouvez faire la même chose en cliquant sur «gestionnaire» à l'écran, en cliquant sur «tester» à la destination de la transition et «tester la fonction». Le code d'origine est "main.py" dans le même répertoire. De plus, si vous utilisez un outil autre que chromedriver ou headless-chrome, vous devrez l'apporter vous-même (celui qui peut être géré en important avec python devrait convenir).

Tout ce que vous avez à faire est de réécrire le contenu de "main.py" avec le code que vous avez utilisé localement. Lors de l'écriture de code, il est pratique d'utiliser «Open Editor» sur l'écran où Cloud Shell est lancé. スクリーンショット 2020-05-16 1.12.13.png

Après avoir réécrit le code, à nouveau

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

Faire. Notez que *** après le déploiement entraînera une erreur s'il ne correspond pas au nom de la fonction dans main.py. Testez-le et s'il n'y a pas de problème, c'est fait! !! Je vous remercie pour votre travail acharné.

point important

À propos de la taille de la mémoire

chrome consomme de la mémoire de manière inattendue. Cliquez sur le nom de la fonction déployée pour passer à l'écran des détails. Capture d'écran 2020-05-18 16.38.14.png Vous pouvez vérifier l'utilisation de la mémoire à partir du menu déroulant "Général". Si le comportement est étrange, modifiez la taille de la mémoire.

Ce à quoi je veux faire attention lors de la réécriture

    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')

Ne les effacez pas. Ça ne marche pas. Cependant, même si vous regardez le webdriver officiel, il ne mentionne pas quel argument a quelle signification, donc si vous connaissez la page appropriée, faites-le moi savoir.

Épilogue

J'obtiens une erreur comme l'image pendant le test, mais c'est un mystère que le journal soit correctement exécuté jusqu'à la fin et en sortie. Hmmm. .. .. スクリーンショット 2020-05-16 1.23.21.png

Postscript

Je comprends la raison de l'erreur ci-dessus! !! Ouvrez un nouvel onglet pour ouvrir un lien lors du scraping

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

Que faire a été défini sur Keys. ** COMMAND ** car l'environnement local était Mac. GCF est l'environnement d'exécution de Python est Ubuntu.

la prochaine fois

La prochaine fois, ~~ Jonouchi mourra, Duel Standby! ~~ C'est un paramètre pour une exécution planifiée, alors attendez-le avec impatience!

Recommended Posts

Stratégie pour intégrer le travail de scraping local à GCP (partie 1)
[Part1] Scraping avec Python → Organisez jusqu'à csv!
Python) Enregistrez le contenu de scraping sur un PC local
Python: grattage partie 1
Python: grattage, partie 2