Exécutez régulièrement le scraping WEB avec AWS-Lambda + Python + Cron

Exécutez régulièrement le scraping WEB avec AWS-Lambda + Python + Cron

introduction

`Ceci est un article sur l'environnement Mac, mais la procédure est la même pour l'environnement Windows. Veuillez lire et essayer la partie dépendant de l'environnement. ''

Objectif

Après avoir lu cet article jusqu'au bout, vous pourrez:

No. Aperçu mot-clé
1 codage Python
2 Grattage WEB Selenium,chromedriver,headless-chromium
3 Paramètres Lambda Lambda

Environnement d'exécution

environnement Ver.
macOS Catalina 10.15.3
Python 3.7.3
selenium 3.141.0

Code source

Je pense que vous pouvez approfondir votre compréhension en suivant réellement le contenu de l'implémentation et le code source. Veuillez l'utiliser par tous les moyens.

GitHub

Articles Liés

Fonctionnalités d'AWS-Lambda

Ce service est un système de paiement à l'utilisation. Notez s'il vous plaît.

Flux global

  1. Écrivez du code Python
  2. Créez un zip pour le téléversement vers Lambda
  3. Créez une fonction Lambda
  4. Téléchargez le zip dans la fonction Lambda
  5. (Supplément) Télécharger à l'aide de couches
  6. Définir les variables d'environnement pour les fonctions Lambda
  7. (Supplément) Définir les variables d'environnement lors de l'utilisation des couches
  8. Configurer Cron pour qu'il s'exécute régulièrement

1. Écrivez du code Python

codage

app/lambda_function.py


"""app/lambda_function.py
"""
import os

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By


def lambda_handler(event, context):
    """lambda_handler
    """
    print('event: {}'.format(event))
    print('context: {}'.format(context))

    headless_chromium = os.getenv('HEADLESS_CHROMIUM', '')
    chromedriver = os.getenv('CHROMEDRIVER', '')

    options = Options()
    options.binary_location = headless_chromium
    options.add_argument('--headless')
    options.add_argument('--no-sandbox')
    options.add_argument('--single-process')
    options.add_argument('--disable-dev-shm-usage')

    driver = webdriver.Chrome(executable_path=chromedriver, options=options)
    driver.get('https://info.finance.yahoo.co.jp/fx/')
    usd_jpy = driver.find_element(By.ID, 'USDJPY_top_bid').text
    driver.close()
    driver.quit()

    return {
        'status_code': 200,
        'usd_jpy': usd_jpy
    }


if __name__ == '__main__':
    print(lambda_handler(event=None, context=None))

`Pour fonctionner avec Lambda, il est nécessaire de définir Options (). ''

2. Créez un zip pour le téléversement vers Lambda

Création de script

make_upload.sh


rm upload.zip
rm -r upload/
rm -r download/

mkdir -p download/bin
curl -L https://chromedriver.storage.googleapis.com/2.41/chromedriver_linux64.zip -o download/chromedriver.zip
curl -L https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-55/stable-headless-chromium-amazonlinux-2017-03.zip -o download/headless-chromium.zip
unzip download/chromedriver.zip -d download/bin
unzip download/headless-chromium.zip -d download/bin

mkdir upload
cp -r download/bin upload/bin
cp app/lambda_function.py upload/
pip install -r app/requirements.txt -t upload/
cd upload/
zip -r ../upload.zip --exclude=__pycache__/* .
cd ../

rm -r upload/
rm -r download/

Créer upload.zip

command_line.sh


sh make_upload.sh

3. Créez une fonction Lambda

Conditions préalables

--Compte AWS créé

Création de fonction Lambda

  1. Connectez-vous à AWS
  2. Ouvrez Lambda à partir du service
  3. Sélectionnez «Fonction» dans le sous-menu et cliquez sur «Créer une fonction».
  4. Sélectionnez «Créer à partir de zéro», entrez le «nom de la fonction», «runtime» et «exécuter le rôle», puis cliquez sur «créer une fonction».

4. Téléchargez le zip dans la fonction Lambda

`Je l'ai téléchargé via S3 car il dépassait 10 Mo. ''

télécharger

  1. Affichez la section «code de fonction» de la fonction Lambda
  2. Sélectionnez «Télécharger un fichier .zip»
  3. Sélectionnez ʻupload.zip dans Uploadet cliquez surSave``

Télécharger lorsque la taille du zip dépasse 10 Mo

  1. Téléchargez ʻupload.zip` sur S3
  2. Affichez la section «code de fonction» de la fonction Lambda
  3. Sélectionnez ʻUpload file from Amazon S3`
  4. Saisissez l'URL du lien Amazon S3 et cliquez sur Enregistrer.

5. (Supplément) Télécharger à l'aide de couches

Télécharger le flux

  1. Séparez bin de ʻupload.zip` et créez un zip avec bin seul
  2. Enregistrez bin dans Layers
  3. Ajoutez Layers à la fonction Lambda
  4. Sélectionnez ʻUploader le fichier .zip pour télécharger ʻupload.zip

5-1. Séparez bin de ʻupload.zip` et créez un zip avec bin seul

bin.sh


bin.zip
├── chromedriver
└── headless-chromium

5-2. Enregistrer bin dans Layers

  1. Sélectionnez «Calque» dans le sous-menu et cliquez sur «Créer un calque»
  2. Entrez n'importe quel nom
  3. Cliquez sur ʻUpload et sélectionnez bin.zip`
  4. Sélectionnez l'option «Compatible Runtime-Option» et cliquez sur «Créer»

5-3. Ajouter Layers à la fonction Lambda

  1. Sélectionnez les «Calques» qui apparaissent au centre de la section «Designer» de la fonction Lambda.
  2. Cliquez sur «Ajouter une couche» de la couche affichée en bas.
  3. Sélectionnez le nom bin.zip enregistré dans Calques et cliquez sur Ajouter

5-4. Sélectionnez ʻUploader le fichier .zip pour télécharger ʻupload.zip

6. Définir les variables d'environnement pour les fonctions Lambda

Paramètres des variables d'environnement

  1. Affichez la section «variable d'environnement» de la fonction Lambda
Clé valeur
CHROMEDRIVER /var/task/bin/chromedriver
HEADLESS_CHROMIUM /var/task/bin/headless-chromium

7. (Supplément) Définir les variables d'environnement lors de l'utilisation des couches

Paramètre de variable d'environnement Calques

  1. Affichez la section «variable d'environnement» de la fonction Lambda
Clé valeur
CHROMEDRIVER /opt/bin/chromedriver
HEADLESS_CHROMIUM /opt/bin/headless-chromium

8. Configurer Cron pour qu'il s'exécute régulièrement

Créer Cron

  1. Affichez la section Designer de la fonction Lambda et cliquez sur Ajouter un déclencheur
  2. Dans les paramètres de déclenchement, sélectionnez CloudWatch Events / EventBridge
  3. Dans la règle, sélectionnez «Créer une nouvelle règle»
  4. Dans le nom de la règle, saisissez un "nom de règle"
  5. Dans le type de règle, sélectionnez "Expression de planification"
  6. Dans l'expression de planification, entrez cron (0 17? * MON-FRI *) et cliquez sur ʻAjouter`

Exemple d'expression Cron

la fréquence formule
10h tous les jours:15 (UTC) cron(15 10 * * ? *)
Du lundi au vendredi à 18 h:00 cron(0 18 ? * MON-FRI *)
8 h le premier jour de chaque mois:00 cron(0 8 1 * ? *)
Toutes les 10 minutes en semaine cron(0/10 * ? * MON-FRI *)
8h du lundi au vendredi:00 à 17 h:Toutes les 5 minutes jusqu'à 55 cron(0/5 8-17 ? * MON-FRI *)
9h le premier lundi de chaque mois cron(0 9 ? * 2#1 *)

Recommended Posts

Exécutez régulièrement le scraping WEB avec AWS-Lambda + Python + Cron
Web scraping avec python + JupyterLab
Web scraping débutant avec python
Web scraping avec Python Première étape
J'ai essayé webScraping avec python.
Grattage avec Python
Grattage avec Python
Grattage WEB avec Python (pour mémo personnel)
Premiers pas avec Python Web Scraping Practice
[Note personnelle] Scraping de pages Web en python3
Site de courses de chevaux Web scraping avec Python
Premiers pas avec Python Web Scraping Practice
Pratiquer le web scraping avec Python et Selenium
Scraping Web facile avec Python et Ruby
[Pour les débutants] Essayez le web scraping avec Python
Grattage en Python (préparation)
Essayez de gratter avec Python.
Grattage avec Python + PhantomJS
Grattage avec du sélénium [Python]
Scraping avec Python + PyQuery
Web scraping avec Python (prévisions météo)
Web scraping avec Python (cours de l'action)
Scraping RSS avec Python
Analyse de données pour améliorer POG 1 ~ Web scraping avec Python ~
Scrapage Web rapide avec Python (tout en prenant en charge le chargement JavaScript)
Les débutants en Python sont bloqués dans leur premier scraping Web
J'ai essayé de gratter avec Python
Gérez les tâches cron avec python
Exploitez TwitterBot avec Lambda, Python
Grattage au sélénium en Python
Grattage avec Selenium + Python Partie 1
[Python] Scraping dans AWS Lambda
Grattage avec chromedriver en python
Grattage festif avec Python, scrapy
Enregistrez des images avec le web scraping
Grattage avec du sélénium en Python
Grattage Web facile avec Scrapy
Grattage avec Tor en Python
API Web avec Python + Falcon
Web scraping avec Selenium (Python)
Scraping prévisions météorologiques avec python
Web scraping à l'aide d'AWS lambda
Grattage avec Selenium + Python Partie 2
Application Web avec Python + Flask ② ③
J'ai essayé de gratter avec du python
Rationalisez la recherche Web avec Python
Application Web avec Python + Flask ④
Exploration Web, scraping Web, acquisition de caractères et sauvegarde d'image avec python
[Python] Exportez régulièrement de CloudWatch Logs vers S3 avec Lambda
Essayez de gratter avec Python + Beautiful Soup
Scraping avec Node, Ruby et Python
Scraping avec Selenium en Python (Basic)
Grattage WEB avec BeautifulSoup4 (page en couches)
Grattage avec Python, Selenium et Chromedriver
Premiers pas avec les applications Web Python
Détection de visage avec Lambda (Python) + Rekognition