[PYTHON] Utilisation de PhantomJS avec AWS Lambda jusqu'à l'affichage du html du site Web

Remarque lorsque vous essayez d'interagir avec un site Web à l'aide de PhantomJS dans Lambda. Cet article ne gratte pas, mais il présente la page à afficher avec phantomJS. Si je peux aller aussi loin, je pense que je peux faire le reste.

buts finaux

Lorsque vous placez le fichier dans S3, la fonction lambda est exécutée. En tant que contenu, phantomJS de la bibliothèque de sélénium python2.7 est utilisé pour générer le html du site google.com.

Si vous pouvez le faire jusqu'à présent, je pense qu'il sera possible d'extraire des informations de vos sites préférés.

Vérifions chacun d'eux.

environnement

version
python 2.7

Tenez compte de la syntaxe, car AWS lambda prend en charge 2.7. Référence) https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/current-supported-versions.html

Nous vérifierons les différentes bibliothèques requises ci-dessous.

selenium https://pypi.python.org/pypi/selenium Installez à partir de ce site. スクリーンショット 2016-07-08 1.41.46.png

Veuillez télécharger la balle tar au bas de la section ci-dessus. À partir de ce dossier, tout le dossier sélénium sous le répertoire py sera utilisé par la suite.

PhantomJS http://phantomjs.org/download.html Veuillez télécharger le zip contenant le fichier exécutable phantomjs depuis Linux 64 bits sur ce site. J'utiliserai phantomjs sous bin après cela.

Autre que ce qui précède, comment télécharger diverses bibliothèques et fichiers exécutables https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html Vous pouvez également suivre ceci. Ou plutôt, j'ai négligé le fait qu'il y avait une telle chose. ..

Rassemblons les matériaux collectés et écrivons le code.

organisation des fichiers

Créez la structure ci-dessus dans un certain répertoire. La substance du processus sera décrite dans «lambda_function.py». Ce nom de fichier peut être n'importe quoi, mais gardez à l'esprit que vous l'utiliserez lors de votre enregistrement dans AWS Administration Console.

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

Tout d'abord, lisez diverses choses. UserAgent peut être spécifié dans PhantomJS, assurez-vous donc de le décrire également.

setup.cfg.py

[install]
prefix= 

Ce fichier s'appelle le fichier de configuration d'installation https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html

Mettons-le comme décrit ici.

Avant de passer à l'écran de gestion ...

Les fichiers doivent être compressés pour pouvoir être téléchargés Allez dans le répertoire avec la structure de fichiers ci-dessus et

$ zip -r upload.zip *

Tapez la commande ci-dessus. Ensuite, ʻupload.zip` est généré dans cette hiérarchie.

Enregistrons les informations sur l'écran de gestion AWS.

Chez Select Blue Print

python 2.7, avec runtime sélectionné Sélectionnez s3-get-object-python comme Blueprint.

À Configurer les déclencheurs

Bien qu'il s'agisse d'éléments divers, le compartiment et le répertoire de S3 qui seront le déclencheur pour exécuter la fonction lambda sont décidés ici. Avec les paramètres ci-dessus

test.com/test/

Il sera exécuté avec le déclencheur lorsque le fichier sera placé. C'est important, mais assurez-vous de cocher Activer le déclencheur.

Cliquez sur Suivant en bas pour passer à l'écran suivant.

Configure function Lambda function code Le nom et la description sont les noms lors de la vérification à partir de l'écran de gestion. Si vous le mettez correctement, vous ne pourrez pas comprendre de quel type de traitement il s'agissait, alors faisons un point.

Je pense que Runtime est Python 2.7 sélectionné.

Lambda function code Le type d'entrée du câble est

Il existe trois types. Puisque nous avons créé Zip plus tôt, sélectionnez Télécharger un fichier .ZIP au milieu. .. Dans le package Function, téléchargeons le ʻupload.zip` créé précédemment.

Lambda function handler and role

L'entrée de ce gestionnaire est extrêmement importante. Veuillez noter que cet élément d'entrée est le nom du fichier principal.Nom de la fonction. Plus tôt Nom de fichier: lambda_function Nom de la fonction: lambda_handler Puisqu'il a été créé dans, entrez lambda_function.lambda_handler dans Handler.

Sélectionnez ensuite Rôle. S'il n'existe pas, créez-en un nouveau, et s'il existe déjà, sélectionnez un rôle existant dans le rôle existant.

Advanced settings Ici, vous pouvez choisir la mémoire (Mo) et les temps d'expiration. La mémoire varie de 128 Ko à 1536 Ko Il semble que les performances du CPU s'améliorent en fonction de la mémoire. (http://qiita.com/hama_du/items/12303d9f9cb800db14d3)

Je vais le mettre pour référence. スクリーンショット 2016-07-08 2.36.21.png (source: https://aws.amazon.com/jp/lambda/pricing/)

Le délai d'expiration peut être sélectionné jusqu'à 5 minutes.

Enfin, choisissons d'exécuter ou non dans VPC.

Achevée!

Une fois que vous avez enregistré la fonction lambda スクリーンショット 2016-07-08 1.30.01.png

Cliquez sur le bouton Test et appuyez sur Enregistrer et tester.

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

Lorsque la fonction est exécutée, vous pouvez confirmer que le contenu de print html peut être sorti sous la forme ci-dessus. Si vous appuyez sur cliquez sur l'image ci-dessus, vous pouvez confirmer que la fonction est en cours d'exécution pour le moment car le html google est réellement imprimé. Même si vous placez le fichier dans S3, la fonction est réellement exécutée.

c'est tout.

Postscript

Je n'écris pas souvent de longs articles et je pense qu'il y a des erreurs, donc je pense que je vais les ajouter / corriger petit à petit.

Edit 1) Modifié car il y avait un écart entre le titre et le contenu (7/11)

Recommended Posts

Utilisation de PhantomJS avec AWS Lambda jusqu'à l'affichage du html du site Web
[AWS] Utilisation de fichiers ini avec Lambda [Python]
Préparer l'environnement de Chainer sur l'instance spot EC2 avec AWS Lambda
[Note] Exportez le html du site avec python.
[AWS Lambda] Créer un package de déploiement à l'aide de l'image Amazon Linux Docker
Pages HTML dynamiques créées avec AWS Lambda et Python
Exemple d'utilisation de lambda
J'ai créé une application avec Lambda qui notifie LINE de "j'aime" à l'aide de l'API Qiita.
Comment obtenir les informations des organisations, Cost Explorer d'un autre compte AWS avec Lambda (python)
L'histoire de l'affichage d'images avec OpenCV ou PIL (uniquement)
Jusqu'au début du tutoriel django avec pycharm sous Windows
Créez rapidement une API avec Python, lambda et API Gateway à l'aide d'AWS SAM
L'implémentation la plus simple d'AWS Lambda
PyTorch avec AWS Lambda [importation Lambda]
Web scraping à l'aide d'AWS lambda
Récapitulatif si vous utilisez AWS Lambda (Python)
[AWS] Créer une API avec API Gateway + Lambda
Tweet Récapitulatif WakaTime à l'aide d'AWS Lambda
Notifier HipChat avec AWS Lambda (Python)
Obtenez la largeur du div côté serveur avec Selenium + PhantomJS + Python
Obtenez et estimez la forme de la tête en utilisant Dlib et OpenCV avec python
L'histoire de l'utilisation de mysqlclient car PyMySQL ne peut pas être utilisé avec Django 2.2