J'ai mis du sélénium et du chrome sans tête dans AWS lambda. (Notes sous environnement Win10, etc.)

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

procédure

Environnement

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

Suivant

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

  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?

image-20201008223558454.png

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.

référence

en conclusion

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

J'ai mis du sélénium et du chrome sans tête dans AWS lambda. (Notes sous environnement Win10, etc.)
Conseils d'utilisation de Selenium et Headless Chrome dans un environnement CUI
J'ai essayé d'exécuter TensorFlow dans l'environnement AWS Lambda: Préparation
J'ai comparé Node.js et Python lors de la création d'une miniature à l'aide d'AWS Lambda
J'ai essayé d'utiliser du sélénium avec du chrome sans tête
Captures d'écran de la pêche sur le Web avec du sélénium et Chrome.
[Python] Exécutez Headless Chrome sur AWS Lambda
J'ai essayé d'utiliser Headless Chrome de Selenium