Führen Sie das WEB-Scraping regelmäßig mit AWS-Lambda + Python + Cron aus

Führen Sie das WEB-Scraping regelmäßig mit AWS-Lambda + Python + Cron aus

Einführung

`Dies ist ein Artikel über die Mac-Umgebung, aber die Vorgehensweise ist für die Windows-Umgebung dieselbe. Bitte lesen und probieren Sie den umweltabhängigen Teil. ``

Zweck

Nachdem Sie diesen Artikel bis zum Ende gelesen haben, können Sie:

No. Überblick Stichwort
1 Codierung Python
2 WEB-Scraping Selenium,chromedriver,headless-chromium
3 Lambda-Einstellungen Lambda

Ausführungsumgebung

Umgebung Ver.
macOS Catalina 10.15.3
Python 3.7.3
selenium 3.141.0

Quellcode

Ich denke, dass Sie Ihr Verständnis vertiefen können, indem Sie den Implementierungsinhalten und dem Quellcode tatsächlich folgen. Bitte benutzen Sie es auf jeden Fall.

GitHub

Zum Thema passende Artikel

Merkmale von AWS-Lambda

Dieser Service ist ein Pay-as-you-go-System. Bitte beachten Sie.

Gesamtdurchfluss

  1. Schreiben Sie Python-Code
  2. Erstellen Sie eine Zip-Datei zum Hochladen auf Lambda
  3. Erstellen Sie eine Lambda-Funktion
  4. Laden Sie den Reißverschluss in die Lambda-Funktion hoch
  5. (Ergänzung) Hochladen mit Ebenen
  6. Legen Sie Umgebungsvariablen für Lambda-Funktionen fest
  7. (Ergänzung) Legen Sie Umgebungsvariablen fest, wenn Sie Ebenen verwenden
  8. Richten Sie Cron so ein, dass es regelmäßig ausgeführt wird

1. Schreiben Sie Python-Code

Codierung

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

`Um mit Lambda arbeiten zu können, müssen Options () eingestellt werden. ``

2. Erstellen Sie eine Zip-Datei zum Hochladen auf Lambda

Skripterstellung

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/

Erstellen Sie upload.zip

command_line.sh


sh make_upload.sh

3. Erstellen Sie eine Lambda-Funktion

Voraussetzungen

--AWS-Konto erstellt --Lambda-Funktionsrolle erstellt

Lambda-Funktionserstellung

  1. Melden Sie sich bei AWS an
  2. Öffnen Sie Lambda aus dem Dienst
  3. Wählen Sie im Untermenü "Funktion" und klicken Sie auf "Funktion erstellen".
  4. Wählen Sie "Von Grund auf neu erstellen", geben Sie "Funktionsname", "Laufzeit", "Ausführungsrolle" ein und klicken Sie auf "Funktion erstellen".

4. Laden Sie den Reißverschluss in die Lambda-Funktion hoch

`Ich habe es über S3 hochgeladen, weil es 10 MB überschritten hat. ``

hochladen

  1. Zeigen Sie den Abschnitt "Funktionscode" der Lambda-Funktion an
  2. Wählen Sie "ZIP-Datei hochladen"
  3. Wählen Sie "upload.zip" unter "Upload" und klicken Sie auf "Speichern"

Hochladen, wenn die Zip-Größe 10 MB überschreitet

  1. Laden Sie upload.zip in S3 hoch
  2. Zeigen Sie den Abschnitt "Funktionscode" der Lambda-Funktion an
  3. Wählen Sie "Dateien von Amazon S3 hochladen"
  4. Geben Sie die "Amazon S3 Link URL" ein und klicken Sie auf "Speichern"

5. (Ergänzung) Hochladen mit Ebenen

Fluss hochladen

  1. Trennen Sie "bin" von "upload.zip" und erstellen Sie eine Zip-Datei mit bin allein
  2. Registrieren Sie "bin" in "Layers"
  3. Fügen Sie der Lambda-Funktion "Ebenen" hinzu
  4. Wählen Sie "ZIP-Datei hochladen", um "upload.zip" hochzuladen

5-1. Trennen Sie "bin" von "upload.zip" und erstellen Sie eine Zip-Datei mit bin allein

bin.sh


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

5-2. Registrieren Sie "bin" in "Layers"

  1. Wählen Sie im Untermenü "Ebene" und klicken Sie auf "Ebene erstellen"
  2. Geben Sie einen beliebigen Namen ein
  3. Klicken Sie auf "Hochladen" und wählen Sie "bin.zip"
  4. Wählen Sie Compatible Runtime-Option und klicken Sie auf Create

5-3. Fügen Sie der Lambda-Funktion "Ebenen" hinzu

  1. Wählen Sie die "Ebenen" aus, die in der Mitte des Abschnitts "Designer" der Lambda-Funktion angezeigt werden.
  2. Klicken Sie auf "Ebene hinzufügen" der unten angezeigten Ebene.
  3. Wählen Sie den in Layern registrierten Namen "bin.zip" aus und klicken Sie auf "Hinzufügen"

5-4. Wählen Sie "ZIP-Datei hochladen", um "upload.zip" hochzuladen

6. Legen Sie Umgebungsvariablen für Lambda-Funktionen fest

Einstellungen für Umgebungsvariablen

  1. Zeigen Sie den Abschnitt "Umgebungsvariable" der Lambda-Funktion an
Schlüssel Wert
CHROMEDRIVER /var/task/bin/chromedriver
HEADLESS_CHROMIUM /var/task/bin/headless-chromium

7. (Ergänzung) Legen Sie Umgebungsvariablen fest, wenn Sie Ebenen verwenden

Einstellung der Umgebungsvariablen für Ebenen

  1. Zeigen Sie den Abschnitt "Umgebungsvariable" der Lambda-Funktion an
Schlüssel Wert
CHROMEDRIVER /opt/bin/chromedriver
HEADLESS_CHROMIUM /opt/bin/headless-chromium

8. Richten Sie Cron so ein, dass es regelmäßig ausgeführt wird

Erstellen Sie Cron

  1. Zeigen Sie den Abschnitt "Designer" der Lambda-Funktion an und klicken Sie auf "Trigger hinzufügen"
  2. Wählen Sie in den Triggereinstellungen "CloudWatch Events / EventBridge"
  3. Wählen Sie in der Regel "Neue Regel erstellen"
  4. Geben Sie im Regelnamen einen beliebigen Regelnamen ein
  5. Wählen Sie im Regeltyp "Zeitplanausdruck"
  6. Geben Sie im Zeitplanausdruck "cron (0 17? * MON-FRI *)" ein und klicken Sie auf "Hinzufügen"

Beispiel für einen Cron-Ausdruck

Frequenz Formel
Jeden Tag 10 Uhr:15 (UTC) cron(15 10 * * ? *)
Jeden Montag bis Freitag 18 Uhr:00 cron(0 18 ? * MON-FRI *)
8 Uhr am ersten Tag eines jeden Monats:00 cron(0 8 1 * ? *)
Wochentags alle 10 Minuten cron(0/10 * ? * MON-FRI *)
Montag bis Freitag 8 Uhr:00 bis 17 Uhr:Alle 5 Minuten bis zu 55 cron(0/5 8-17 ? * MON-FRI *)
Jeden ersten Montag im Monat um 9 Uhr cron(0 9 ? * 2#1 *)

Recommended Posts

Führen Sie das WEB-Scraping regelmäßig mit AWS-Lambda + Python + Cron aus
Web Scraping mit Python + JupyterLab
Web Scraping Anfänger mit Python
Web Scraping mit Python Erster Schritt
Ich habe versucht, WebScraping mit Python.
Scraping mit Python
Scraping mit Python
WEB-Scraping mit Python (für persönliche Notizen)
Erste Schritte mit Python Web Scraping Practice
[Persönlicher Hinweis] Scraping von Webseiten in Python3
Pferderennseite Web Scraping mit Python
Erste Schritte mit Python Web Scraping Practice
Üben des Web-Scrapings mit Python und Selen
Einfaches Web-Scraping mit Python und Ruby
[Für Anfänger] Versuchen Sie Web Scraping mit Python
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Scraping mit Python + PhantomJS
Schaben mit Selen [Python]
Scraping mit Python + PyQuery
Web Scraping mit Python (Wettervorhersage)
Web Scraping mit Python (Aktienkurs)
Scraping von RSS mit Python
Datenanalyse zur Verbesserung von POG 1 ~ Web Scraping mit Python ~
Schnelles Web-Scraping mit Python (unterstützt das Laden von JavaScript)
Python-Anfänger bleiben beim ersten Web-Scraping stecken
Ich habe versucht, mit Python zu kratzen
Verwalten Sie Cron-Jobs mit Python
Betreiben Sie TwitterBot mit Lambda, Python
Schaben mit Selen in Python
Schaben mit Selen + Python Teil 1
[Python] Scraping in AWS Lambda
Schaben mit Chromedriver in Python
Festliches Scraping mit Python, Scrapy
Speichern Sie Bilder mit Web Scraping
Scraping mit Selen in Python
Einfaches Web-Scraping mit Scrapy
Scraping mit Tor in Python
Web-API mit Python + Falcon
Web Scraping mit Selenium (Python)
Kratzwettervorhersage mit Python
Web Scraping mit AWS Lambda
Schaben mit Selen + Python Teil 2
Webanwendung mit Python + Flask ② ③
Ich habe versucht, mit Python zu kratzen
Optimieren Sie die Websuche mit Python
Webanwendung mit Python + Flask ④
Webcrawlen, Web-Scraping, Zeichenerfassung und Speichern von Bildern mit Python
[Python] Exportieren Sie regelmäßig mit Lambda aus CloudWatch-Protokollen nach S3
Versuchen Sie es mit Python + Beautiful Soup
Scraping mit Node, Ruby und Python
Scraping mit Selen in Python (Basic)
Scraping mit Python, Selen und Chromedriver
Erste Schritte mit Python-Webanwendungen
Gesichtserkennung mit Lambda (Python) + Erkennung