[PYTHON] Verwenden von PhantomJS mit AWS Lambda bis zur Anzeige des HTML-Codes der Website

Ein Hinweis beim Versuch, mit einer Website über PhantomJS in Lambda zu interagieren. Dieser Artikel kratzt nicht, stellt jedoch die Seite vor, die mit phantomJS angezeigt werden soll. Wenn ich so weit gehen kann, denke ich, dass ich den Rest erledigen kann.

Endziele

Wenn Sie die Datei in S3 ablegen, wird die Lambda-Funktion ausgeführt. Als Inhalt wird phantomJS der Python2.7-Selenbibliothek verwendet, um das HTML der google.com-Site auszugeben.

Wenn Sie dies bisher tun können, wird es meiner Meinung nach möglich sein, Informationen von Ihren Lieblingsseiten zu extrahieren.

Lassen Sie uns jeden einzelnen überprüfen.

Umgebung

version
python 2.7

Beachten Sie die Syntax, da AWS Lambda 2.7 unterstützt. Referenz) https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/current-supported-versions.html

Wir werden die verschiedenen erforderlichen Bibliotheken unten überprüfen.

selenium https://pypi.python.org/pypi/selenium Von dieser Site installieren. スクリーンショット 2016-07-08 1.41.46.png

Bitte laden Sie den Teerball unten im obigen Abschnitt herunter. Ab diesem Ordner wird danach der gesamte Selen-Ordner unter dem py-Verzeichnis verwendet.

PhantomJS http://phantomjs.org/download.html Bitte laden Sie die Zip-Datei mit der ausführbaren Datei von phantomjs von Linux 64-Bit auf dieser Site herunter. Ich werde danach Phantomjs unter bin verwenden.

Herunterladen verschiedener Bibliotheken und ausführbarer Dateien außer den oben genannten https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html Sie können dies auch verfolgen. Oder besser gesagt, ich habe die Tatsache übersehen, dass es so etwas gab. ..

Lassen Sie uns die gesammelten Materialien zusammenstellen und den Code schreiben.

Dateiorganisation

Erstellen Sie die obige Struktur in einem bestimmten Verzeichnis. Die Substanz des Prozesses wird in lambda_function.py beschrieben. Dieser Dateiname kann beliebig sein. Beachten Sie jedoch, dass Sie ihn bei der Registrierung in der AWS Administration Console verwenden.

lambda_function.py

python


#!/usr/bin/env python

import time # for sleep
import os   # for path
import selenium 
from selenium import webdriver 
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities


def lambda_handler(event, context):
  # set user agent
  user_agent = ("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36")

  dcap = dict(DesiredCapabilities.PHANTOMJS)
  dcap["phantomjs.page.settings.userAgent"] = user_agent
  dcap["phantomjs.page.settings.javascriptEnabled"] = True

  browser = webdriver.PhantomJS(service_log_path=os.path.devnull, executable_path="/var/task/phantomjs", service_args=['--ignore-ssl-errors=true'], desired_capabilities=dcap)

  browser.get('http://google.com')
  html = browser.execute_script("return document.getElementsByTagName('html')[0].innerHTML")
  print html

Lesen Sie zuerst verschiedene Dinge. UserAgent kann in PhantomJS angegeben werden. Beschreiben Sie es daher ebenfalls.

setup.cfg.py

[install]
prefix= 

Diese Datei wird als Setup-Konfigurationsdatei bezeichnet https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html

Lassen Sie es uns wie hier beschrieben einfügen.

Bevor Sie zum Verwaltungsbildschirm wechseln ...

Dateien müssen komprimiert sein, damit sie hochgeladen werden können Wechseln Sie in das Verzeichnis mit der obigen Dateistruktur.

$ zip -r upload.zip *

Geben Sie den obigen Befehl ein. Dann wird in dieser Hierarchie upload.zip generiert.

Registrieren wir die Informationen auf dem AWS-Verwaltungsbildschirm.

Bei Select Blue Print

Python 2.7 mit ausgewählter Laufzeit Wählen Sie s3-get-object-python als Blaupause.

Bei Trigger konfigurieren

Obwohl es sich um verschiedene Elemente handelt, werden hier der Bucket und das Verzeichnis von S3 als Auslöser für die Ausführung der Lambda-Funktion festgelegt. Mit den obigen Einstellungen

test.com/test/

Es wird mit dem Trigger ausgeführt, wenn die Datei abgelegt wird. Es ist wichtig, aber stellen Sie sicher, dass Sie den Auslöser aktivieren aktivieren.

Klicken Sie unten auf Weiter, um zum nächsten Bildschirm zu gelangen.

Configure function Lambda function code Name und Beschreibung sind die Namen, die auf dem Verwaltungsbildschirm überprüft werden. Wenn Sie es richtig anlegen, werden Sie nicht verstehen können, um welche Art von Verarbeitung es sich handelt. Lassen Sie uns also einen Punkt machen.

Ich denke, Runtime ist Python 2.7 ausgewählt.

Lambda function code Conde-Eintragstyp ist

Es gibt drei Arten. Da wir Zip zuvor erstellt haben, wählen Sie in der Mitte die Option Upload einer ZIP-Datei. .. Laden Sie im Funktionspaket die zuvor erstellte Datei "upload.zip" hoch.

Lambda function handler and role

Die Eingabe dieses Handlers ist äußerst wichtig. Bitte beachten Sie, dass dieses Eingabeelement der Name der Hauptdatei ist. Funktionsname. Vorhin Dateiname: lambda_function Funktionsname: lambda_handler Da es in erstellt wurde, geben Sie lambda_function.lambda_handler in Handler ein.

Wählen Sie dann Rolle. Wenn es nicht vorhanden ist, erstellen Sie eine neue und wählen Sie eine vorhandene Rolle aus der vorhandenen Rolle aus, falls sie bereits vorhanden ist.

Advanced settings Hier können Sie die Speicher- (MB) und Timeout-Zeiten auswählen. Der Speicher reicht von 128 KB bis 1536 KB Es scheint, dass sich die Leistung der CPU je nach Speicher verbessert. (http://qiita.com/hama_du/items/12303d9f9cb800db14d3)

Ich werde es als Referenz setzen. スクリーンショット 2016-07-08 2.36.21.png (source: https://aws.amazon.com/jp/lambda/pricing/)

Die Timeout-Zeit kann bis zu 5 Minuten gewählt werden.

Lassen Sie uns abschließend auswählen, ob in VPC ausgeführt werden soll.

Komplett!

Sobald Sie die Lambda-Funktion registriert haben スクリーンショット 2016-07-08 1.30.01.png

Klicken Sie auf die Schaltfläche Test und klicken Sie auf Speichern und testen.

スクリーンショット 2016-07-08 1.32.04.png

Wenn die Funktion ausgeführt wird, können Sie bestätigen, dass der Inhalt von "print html" in der obigen Form ausgegeben werden kann. Wenn Sie auf das obige Bild klicken, können Sie bestätigen, dass die Funktion vorerst ausgeführt wird, da Google HTML tatsächlich gedruckt wird. Selbst wenn Sie die Datei in S3 ablegen, wird die Funktion tatsächlich ausgeführt.

das ist alles.

Nachtrag

Ich schreibe nicht sehr oft lange Artikel und ich denke, dass es einige Fehler gibt, also denke ich, dass ich sie nach und nach hinzufügen / korrigieren werde.

Bearbeiten 1) Bearbeitet, weil es eine Diskrepanz zwischen dem Titel und dem Inhalt gab (7/11)

Recommended Posts

Verwenden von PhantomJS mit AWS Lambda bis zur Anzeige des HTML-Codes der Website
[AWS] Verwenden von INI-Dateien mit Lambda [Python]
Bereiten Sie die Umgebung von Chainer auf der EC2-Spot-Instanz mit AWS Lambda vor
[Hinweis] Exportieren Sie das HTML der Site mit Python.
[AWS Lambda] Erstellen Sie ein Bereitstellungspaket mit dem Amazon Linux Docker-Image
Dynamische HTML-Seiten mit AWS Lambda und Python
Beispiel für die Verwendung von Lambda
Ich habe mit Lambda eine App erstellt, die LINE über die Qiita-API über "Likes" informiert.
So erhalten Sie Informationen von Organisationen, Cost Explorer eines anderen AWS-Kontos bei Lambda (Python)
Die Geschichte der Anzeige von Bildern mit OpenCV oder PIL (nur)
Bis zum Start des Django-Tutorials mit Pycharm unter Windows
Erstellen Sie mit AWS SAM schnell eine API mit Python, Lambda und API Gateway
Die einfachste AWS Lambda-Implementierung
PyTorch mit AWS Lambda [Lambda-Import]
Web Scraping mit AWS Lambda
Zusammenfassung bei Verwendung von AWS Lambda (Python)
[AWS] API mit API Gateway + Lambda erstellen
Tweet WakaTime Zusammenfassung mit AWS Lambda
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
Ermitteln Sie mit Selenium + PhantomJS + Python die Breite des Div auf der Serverseite
Erhalten und schätzen Sie die Form des Kopfes mit Dlib und OpenCV mit Python
Die Geschichte der Verwendung von mysqlclient, da PyMySQL nicht mit Django 2.2 verwendet werden kann