Lors de la création d'un Web Scraper avec Python, lorsque la cible cible est obtenue avec javascript côté client, il n'est souvent pas possible d'obtenir simplement les informations souhaitées avec urlopen. Par conséquent, je pense qu'il est souvent obtenu par Selenium ou API (le cas échéant).
D'un autre côté, si vous souhaitez faire quelque chose de manière régulière et économique, c'est une bonne idée d'utiliser les lambdas AWS et CloudEvents à la demande.
Commençons
Pour utiliser AWS lambda avec Amazon Linux comme système d'exploitation sous l'environnement Windows, vous avez besoin de la prise en charge de ** Ubuntu sur Windows 10 ** ou d'un autre serveur Linux distant. Cette fois, j'ai choisi Ubuntu sur Windows 10 comme méthode plus économique.
Veuillez vous référer à ce qui suit pour la méthode d'installation spécifique.
Utilisation de Linux avec Windows 10
Ensuite, mettez Python.
sudo apt-get update
sudo apt-get install python3.6
Une fois l'environnement prêt, procédez comme suit sous Ubuntu.
#Déplacer vers le disque C
cd /mnt/c/
mkdir /path/to/folder
cd /path/to/folder
L'explorateur de fichiers va donc générer et trouver immédiatement le fichier. (Ce sera pratique de le mettre dans S3 plus tard)
――Il convient de noter ici que même si vous utilisez une nouvelle version de headless-chrome, une erreur se produira à moins qu'il ne s'agisse d'un pilote chrome correspondant. J'utilisais les deux suivants
https://github.com/adieuadieu/serverless-chrome/releases/tag/v1.0.0-37
stable-headless-chromium-64.0.3282.167-amazonlinux-2017-03.zip
https://chromedriver.storage.googleapis.com/index.html?path=2.37/
chromedriver_linux64.zip
Ensuite, décompressez-les, ajustez les autorisations comme indiqué ci-dessous (chmod 777
), et enfin stockez-les dans le dossier chrome comme indiqué ci-dessous et compressez-les dans un fichier ZIP.
chrome.zip
chrome
├── chromedriver
└── headless-chromium
--Créez un fichier ZIP de package de sélénium sur Ubuntu.
mkdir python-selenium
cd python-selenium
python3 -m pip install --system --target ./ selenium
zip -r python-selenium.zip ../python-selenium
--Mettez chrome.zip
et python-selenium.zip
dans S3, notez l'URL de l'objet et créez une couche.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def lambda_handler(event, context):
options = Options()
#Entrez votre chemin de fichier correspondant
options.binary_location = '/opt/chrome/headless-chromium'
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--single-process')
options.add_argument('--disable-dev-shm-usage')
#Entrez votre chemin de fichier correspondant
browser = webdriver.Chrome('/opt/chrome/chromedriver', chrome_options=options)
browser.get('https://www.google.com')
title = browser.title
browser.close()
browser.quit()
return {"title": title}
Il convient de noter ici que le paramètre de base de la fonction lambda nécessite plus de 256 Mo de mémoire pour exécuter l'exemple et que la durée prend environ 10 secondes (512 Mo, délai d'expiration: paramètre 20 s) à l'avance. Il vaut mieux s’adapter et voir la situation.
Q&A
Vous vous demandez peut-être, alors notez le nombre de choses sur lesquelles vous étiez confus lorsque vous l'avez fait.
Q: Pourquoi le mettre dans le dossier chrome et le compresser
R: Ce n'est pas nécessaire, mais lorsque vous ajoutez une couche à Lambda, celle du fichier zip sera attachée au dossier / opt
. Par exemple, / opt / chrome / chromedriver
& / opt / chrome / headless-chrome
Q: Comme le montre la figure, n'est-il pas possible d'utiliser la fermeture éclair de Windows?
R: Lorsque je le télécharge sur Layer, j'obtiens le message d'erreur «Message: l'exécutable« chromedriver »peut avoir de mauvaises autorisations», alors je l'ai vérifié et il semble que les autorisations ne fonctionnent pas correctement. Par conséquent, ajustons les autorisations du fichier sous Ubuntu et compressons-le.
Ne paniquez pas si vous obtenez des erreurs, c'est une bonne idée de vérifier le rapport d'erreur après avoir exécuté le test lambda. Étonnamment, le problème est clairement écrit.
Recommended Posts