[PYTHON] Ich habe Selen und kopfloses Chrom in AWS Lambda gegeben. (Hinweise unter Win10-Umgebung usw.)

Wenn Sie beim Erstellen eines Web Scraper mit Python das Ziel mit clientseitigem Javascript erreichen, ist es häufig nicht möglich, die gewünschten Informationen einfach mit urlopen abzurufen. Daher denke ich, dass es oft durch Selen oder API (falls vorhanden) erhalten wird.

Wenn Sie jedoch regelmäßig und wirtschaftlich etwas unternehmen möchten, ist es eine gute Idee, On-Demand-AWS-Lambdas und CloudEvents zu verwenden.

Lasst uns beginnen

Verfahren

Umgebung

Um AWS Lambda mit Amazon Linux als Betriebssystem in einer Windows-Umgebung verwenden zu können, benötigen Sie die Unterstützung von ** Ubuntu unter Windows 10 ** oder einem anderen Remote-Linux-Server. Dieses Mal habe ich Ubuntu unter Windows 10 als wirtschaftlichere Methode gewählt.

Die spezifische Installationsmethode finden Sie im Folgenden.

Verwenden von Linux unter Windows 10

Als nächstes setzen Sie Python ein.

sudo apt-get update
sudo apt-get install python3.6

Nächster

Wenn die Umgebung fertig ist, gehen Sie unter Ubuntu wie folgt vor.

 #Wechseln Sie zur C-Disk
  cd /mnt/c/  
  mkdir /path/to/folder
  cd /path/to/folder

So generieren und finden Sie die Datei schnell im Datei-Explorer. (Es wird bequem sein, es später in S3 zu setzen)

――Es ist hier zu beachten, dass selbst bei Verwendung einer neuen Version von Headless-Chrom ein Fehler auftritt, sofern es sich nicht um einen entsprechenden Chromtreiber handelt. Ich habe die folgenden zwei verwendet

--Nächste, entpacken Sie sie, passen Sie die Berechtigungen wie unten gezeigt an (chmod 777) und speichern Sie sie schließlich wie unten gezeigt im Chrome-Ordner und komprimieren Sie sie in eine ZIP-Datei.

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

--Erstellen Sie eine ZIP-Datei für ein Selenium-Paket unter Ubuntu.

  mkdir python-selenium
  cd python-selenium
  
  python3 -m pip install --system --target ./ selenium
  zip -r python-selenium.zip ../python-selenium

--Geben Sie chrome.zip & python-selenium.zip in S3 ein, notieren Sie sich die Objekt-URL und erstellen Sie eine Ebene.

  from selenium import webdriver
  from selenium.webdriver.chrome.options import Options
  
  def lambda_handler(event, context):
      options = Options()

      #Geben Sie Ihren entsprechenden Dateipfad ein
      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')

      #Geben Sie Ihren entsprechenden Dateipfad ein
      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}

Hierbei ist zu beachten, dass die Grundeinstellung der Lambda-Funktion mehr als 256 MB Speicher benötigt, um das Beispiel auszuführen, und die Dauer im Voraus etwa 10 Sekunden (512 MB, Timeout: 20s-Einstellung) dauert. Es ist besser, sich an die Situation anzupassen und sie zu sehen.

Q&A

Sie wundern sich vielleicht, schreiben Sie also auf, über wie viele Dinge Sie verwirrt waren, als Sie es getan haben.

F: Warum in den Chrome-Ordner legen und komprimieren?

A: Es ist nicht erforderlich, aber wenn Sie Lambda eine Ebene hinzufügen, wird die in der Zip-Datei an den Ordner "/ opt" angehängt. Zum Beispiel "/ opt / chrome / chromedriver" und "/ opt / chrome / headless-chrom"

F: Ist es, wie in der Abbildung gezeigt, nicht möglich, das Zippen von Windows zu verwenden?

image-20201008223558454.png

A: Wenn ich es tatsächlich auf Layer hochlade, wird die Fehlermeldung "Nachricht: Die ausführbare Datei" chromedriver "hat möglicherweise falsche Berechtigungen" angezeigt. Daher habe ich sie überprüft und es scheint, dass die Berechtigungen nicht ordnungsgemäß funktionieren. Passen wir daher die Berechtigungen der Datei unter Ubuntu an und komprimieren sie.

Referenz

abschließend

Keine Panik, wenn Fehler auftreten. Überprüfen Sie den Fehlerbericht nach dem Ausführen des Lambda-Tests. Überraschenderweise ist das Problem klar geschrieben.

Recommended Posts

Ich habe Selen und kopfloses Chrom in AWS Lambda gegeben. (Hinweise unter Win10-Umgebung usw.)
Tipps zur Verwendung von Selen und Headless Chrome in einer CUI-Umgebung
Ich habe versucht, TensorFlow in der AWS Lambda-Umgebung auszuführen: Vorbereitung
Ich habe Node.js und Python beim Erstellen eines Miniaturbilds mit AWS Lambda verglichen
Ich habe versucht, Selen mit Headless-Chrom zu verwenden
Screenshots des Webfischens mit Selen und Chrom.
[Python] Führen Sie Headless Chrome unter AWS Lambda aus
Ich habe versucht, Headless Chrome von Selenium zu verwenden